输入一个正整数,计算此正整数所有因数之和(不包括自身,如果此数是质数,因数之和为1,用C++写:例如: 输入:36 输出:55 输入:28 输出:28
时间: 2024-10-13 10:07:56 浏览: 50
Java将一个正整数分解质因数的代码
5星 · 资源好评率100%
当你需要计算一个正整数的所有因数之和,但不包括它本身,你可以编写如下的C++函数来实现。这里我们采用一个常见的算法,即遍历从1到这个数的平方根,对于每一个数i,检查它是否能整除给定的数n,如果可以,则将i和n/i都添加到总和中。
```cpp
#include <iostream>
#include <cmath>
bool isPrime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; ++i)
if (num % i == 0)
return false;
return true;
}
int sumOfFactors(int n) {
int sum = 1; // 自然数1也是每个数的因子
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) { // 如果i是因子
if (n / i != i) // 如果n不是i的平方,则还有一个因子n/i
sum += i + n / i;
else // 否则,只有这一个因子
sum += i;
}
}
return isPrime(n) ? 1 : sum; // 若n是质数,因数之和为1
}
int main() {
int input;
std::cout << "请输入一个正整数: ";
std::cin >> input;
int result = sumOfFactors(input);
std::cout << "输出: " << result << std::endl;
return 0;
}
```
阅读全文