C语言求解,c++求解答

1、编写函数fn:计算并输出给定整数n的所有因于之和(不包括1与自身)。注意:n的值不大于1000。
例如:n的值为855时,应输出704。

可以一起讨论讨论找我呦

#include <iostream>

using namespace std;

int fn(int n)
{
    if (n <= 2) return 0;
    int sum = 0;
    for (int i = 2; i < n; i++)
    {
        if (n % i == 0) sum += i;
    }
    return sum;
}

int main()
{
    int n;
    cin >> n;
    cout << fn(n) << endl;
}
int sum=0;
for(int i=2;i*i<=n;i++)
{
    if(n%i==0)
 {
  sum+=i;
   if(i*i!=n)
   sum+=n/i;
 }
}
cout<<sum;

可以编写如下的 C++ 代码实现:

#include <iostream>
using namespace std;

int fn(int n) {
    if (n <= 2) {
        // 如果 n 小于等于 2,那么不存在因数,应该返回 0
        return 0;
    }
    
    int sum_of_divisors = 1;  // 先将 1 加入到所有因数之和中
    for (int i = 2; i <= n/2; i++) {
        // 在 [2, n/2] 的区间内枚举可能的因数
        if (n % i == 0) {
            // 如果 n 可以被 i 整除,那么 i 是 n 的一个因数,加入到总和中
            sum_of_divisors += i;
        }
    }
    
    return sum_of_divisors;
}

// 测试代码
int main() {
    cout << fn(855) << endl; // 输出:704
    return 0;
}

这个函数通过一个循环在 [2, n/2] 的范围内枚举可能的因数。如果某个数 i 能够整除 n,那么它就是 n 的一个因数,在这里将其累加到总和中。最终返回总和即可。

需要注意的是,由于题目要求不包括 1 和自身,所以处理时需要特别处理 n <= 2 的情况,否则会认为 n 的因数之和为 1(这是错误的)。