c语言求因子之和(不包括1和它本身)

c语言求因子之和(不包括1和它本身),请问我的算法函数为什么不对

```c
int fun(int n)
{int a,sum=0;
{for(a=2;a<sqrt(n);a++)
if(n%a==0)
{sum+=a+n/a;}}
return sum;
}

```谢谢大家

你这括号

img

【以下回答由 GPT 生成】

问题分析: 根据代码来看,函数fun的目标是求一个数n的所有因子(不包括1和它本身)的和。然而,代码中存在几个问题: 1. 循环的终止条件不正确,应该是a <= sqrt(n),而不是a < sqrt(n)。 2. 当n为一个平方数时,会出现a和n/a相等的情况,导致结果被加了两次。

解决方案如下:

int fun(int n)
{
    int a, sum = 0;
    for(a = 2; a <= sqrt(n); a++) // 修改循环的终止条件
    {
        if(n % a == 0)
        {
            sum += a; // 只加入因子a
            if(n/a != a) // 避免重复加入因子n/a
            {
                sum += n / a;
            }
        }
    }
    return sum;
}

这个修改后的函数fun将会正确地求出数n的所有因子(不包括1和它本身)之和。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这样改,供参考:

int fun(int n)
{
    int a, sum=0;
    //{
    for(a = 2;a < n; a++) //for(a = 2;a < sqrt(n); a++)
        if(n % a==0)
        {
            sum+=a;     //+n/a;
        }
    //}
    return sum;
}