已知一个正整数N(20 <= N <= 800000000),请你编写程序求出该数的全部因子(不包括1和n)的和 用C++
时间: 2025-01-18 16:06:52 浏览: 51
在C++中,你可以通过遍历从2到`sqrt(N)`的所有数字来计算一个正整数N的因子之和,因为如果存在大于`sqrt(N)`的因子,那么必然存在一个小于等于`sqrt(N)`的因子配对,它们相乘的结果会超过N。以下是实现这个功能的一个简单示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
long long sumFactors(int n) {
vector<int> factors;
for (int i = 2; i * i <= n; ++i) {
if (n % i == 0) {
// 添加较小因子
factors.push_back(i);
// 如果n是i的平方,则添加一次更大的因子(即n/i)
if (i != n / i)
factors.push_back(n / i);
}
}
long long factorSum = accumulate(factors.begin(), factors.end(), 0LL); // 使用STL库函数累加因子
return factorSum;
}
int main() {
int N;
cin >> N;
cout << "因子之和: " << sumFactors(N) << endl;
return 0;
}
```
在这个代码中,我们首先创建了一个空向量`factors`来存储因子。然后对于每个`i`(从2开始到`sqrt(N)`),如果`i`能整除`N`,我们就把它加入因子列表,并检查`N`是否是`i`的平方(如果是,还需要加上`N/i`)。最后,`accumulate()`函数用于计算所有因子的总和。
阅读全文
相关推荐


















