我写了两个算法来得到一个给定的数字的正确除数的总和,找到完美的数字或丰富的数字。问题在适当的除数算法
long sum_divisors_1(int a)
{
int i, t;
long sum = 1;
for (i = 2, t = sqrt(a); i < t + 1; i++) {
if (a % i == 0) {
sum += i;
sum += a/i;
}
}
if (a % t == 0)
sum -= t;
return sum;
}
long sum_divisors_2(int a)
{
int i, sum;
sum = 0;
for (i = 1; i < (int) (a/2 + 1); i++) {
if (a % i == 0)
sum += i;
}
return sum;
}
我认为他们都是正确的,第一个更快。但是我只能从第二个算法得到正确的结果。代码的其他部分是相同的。
有什么建议吗?在真实的工业编程中如何找到适当的因子?
在此先感谢。
你认为** a **本身是一个除数吗? –
你认为两者都是正确的,同时,只有第二个给出正确的结果?两者任一。 –