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;
}
```谢谢大家
你这括号
【以下回答由 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;
}