gpt4 book ai didi

c - 适当除数算法中的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:02 26 4
gpt4 key购买 nike

我写了两个算法来得到给定数的真因数之和,以找到完美数或丰富数。

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;
}

而且我认为它们都是正确的,第一个更快。但是我只能从第二个算法中得到正确的结果。代码的其他部分相同。

有什么建议吗?以及如何在实际工业编程中找到适当的除数?

提前致谢。

最佳答案

你的问题出在这里:

if (a % t == 0)
sum -= t;

由于您将 t 从 float 转换为 int,因此它会向下舍入为整数值。这也假设 t 是实际的平方根,但实际上不是。当一个数字具有因子 xx+1 时,这将评估为真(当 i = 6 时,我发布的单元测试也失败了,因为它的平方根是 2.45,2 是一个因数)。

支票真的应该是:

if (t*t == a)
sum -= t;

关于c - 适当除数算法中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com