我遇到问题需要找到/提出这种方式的解决方案。 我被要求写下一个接收两个整数的方法,并返回这些数字的公约数和素数除数之和。例如:
我有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个循环以使其同时计算?
答案 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)))
有更好的方法来考虑更大的整数,但这对于求职面试来说可能就足够了。