2个数的共同除数之和

时间:2015-05-25 17:52:37

标签: c methods primes

我遇到问题需要找到/提出这种方式的解决方案。 我被要求写下一个接收两个整数的方法,并返回这些数字的公约数和素数除数之和。例如:

我有2个号码: A = 48且B = 60

48 = 2 * 2 * 2 * 2 * 3 60 = 2 * 2 * 3 * 5

2,2,3是这两个数的常见素数除数,因此2 + 2 + 3 = 7 该方法将返回7.

我制作了一个原始代码:

    int n=48,k=60;
    int i=2;

    while(n!=1)
    {
        if(n%i==0)
        {
            System.out.print(i+" ");
            n/=i;
        }
        else
        {
            i++;        
        }
    }

    i=2;
    System.out.println();

    while(k!=1)
    {
        if(k%i==0)
        {
            System.out.print(i+" ");
            k/=i;
        }
        else
        {
            i++;        
        }
    }

如何组合2个循环以使其同时计算?

1 个答案:

答案 0 :(得分:1)

我会给你伪代码,然后留给你翻译成C.首先,Euclid的算法找到两个数字的最大公约数:

function gcd(a, b)
    if b == 0
        return a
    return gcd(b, a % b)

例如,gcd(48, 60) = 12。接下来,一个简单的函数,通过试验分解因子整数:

function factors(n)
    f, fs := 2, []
    while f * f <= n
        while n % f == 0
            fs.append(f)
            n := n / f
        f := f + 1
    if n > 1
        fs.append(f)
    return fs

例如,factors(12) = [2, 2, 3]。然后把它们放在一起:

function sum-of-common-factors(x, y)
    return sum(factors(gcd(x, y)))

有更好的方法来考虑更大的整数,但这对于求职面试来说可能就足够了。