在两个数字之间找到素数 gcd

Find Prime gcd between two numbers

对于 c 语言的学生课程, 我需要找到两个整数的素数最大公约数 (gcd)。 如果没有答案,输出应该是 1。 只能使用if语句、scanf、循环(不能使用外部函数)。

输入和输出示例:

(20,20)--->5
(21,20)--->1
(22,20)--->2
(29,29)--->29

有人可以帮我解决这个问题吗? 这是我目前所拥有的:

#include <stdio.h>
int main()
{
    int num1, num2, i, hcf;
    printf("Enter two integers: ");
    scanf("%d %d", &num1, &num2);
    for(i=1; i<=num1 || i<=num2; ++i)
    {
        if(num1%i==0 && num2%i==0)   /* Checking whether i is a factor of both number */
            hcf=i;
    }
    printf("gcd of %d and %d is %d", num1, num2, hcf);
    return 0;
}

有很多关于如何找到 gcd 的示例,但是 none 我找到了主要 gcd。

修复示例

#include <stdio.h>

int main(void){
    int num1, num2, i, hcf = 1;
    int tmp1, tmp2;
    printf("Enter two integers: ");
    scanf("%d %d", &num1, &num2);
    tmp1 = num1;
    tmp2 = num2;
    for(i=2; i<= tmp1 && i<= tmp2; ++i){
        while(tmp1 % i== 0 && tmp2 % i == 0){
            hcf=i;
            tmp1 /= hcf;
            tmp2 /= hcf;
        }
    }
    printf("gcd of %d and %d is %d", num1, num2, hcf);
    return 0;
}

您可以直接使用:

第一步:生成所有小于最大 int 值的素数列表。

第二步:使用该列表和试除法找到每个给定整数的质因数。保留每个主要因素的列表。

第三步:检查一个因素列表,检查每个因素是否在另一个列表中。如果只有一个,那就是你最大的公约数。如果两个列表中都有多个,则 GCD 不是质数。

import java.util.Scanner;
public class Main
{
    static boolean CheckPrime(int n)
    {
        int flag=0;
        if(n==0 || n==1)
        {
            flag=0;
        }
        for(int i=2;i<=n/2;i++)
        {
            if(n%i==0)
            {
                flag=1;
                break;
            }
        }
        if(flag==0)
        {
          return true;
        }
        else
        {
            return false;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n1=sc.nextInt();
        int n2=sc.nextInt();
        int[] arr1 = new int[n1];
        int[] arr2 = new int[n2];
        for(int i=2;i<=n1;i++)
        {
            if(n1%i==0)
            {
                if(CheckPrime(i))
                {
                 arr1[i-2]=i;
                }
            }
        }
        for(int j=2;j<=n2;j++)
        {
            if(n2%j==0)
            {
                if(CheckPrime(j))
                {
                 arr2[j-2]=j;
                }
            }
        }
        int max=-1;
        for(int i=1;i<n1;i++)
        {
            for(int j=1;j<n2;j++)
            {
                if(arr1[i]==arr2[j])
                {
                    if(max<arr2[j])
                    {
                        max=arr2[j];
                    }
                    break;
                }
            }
        }
        if(max==0){max=1;}
        System.out.print(max);
    }
}