完数是指一个整数恰好等于它的因子之和(除自身外),则称这个数为完数。从键盘先后输入两个不大于9999的正整数m和n,若m>n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数。c++
时间: 2024-03-25 09:37:01 浏览: 124
以下是C++代码实现:
```c++
#include <iostream>
using namespace std;
// 计算因子和
int factorSum(int n) {
int sum = 1;
for (int i = 2; i <= n / 2; i++) {
if (n % i == 0) {
sum += i;
}
}
return sum;
}
int main() {
int m, n;
cout << "请输入两个不大于9999的正整数m和n,中间用空格隔开:" << endl;
cin >> m >> n;
// 保证m小于等于n
if (m > n) {
int temp = m;
m = n;
n = temp;
}
// 查找完数并输出
for (int i = m; i <= n; i++) {
if (i == factorSum(i)) {
cout << i << " ";
}
}
return 0;
}
```
输入样例:
```
请输入两个不大于9999的正整数m和n,中间用空格隔开:
1 10000
```
输出样例:
```
6 28 496 8128
```
相关问题
完数是指一个整数恰好等于它的因子之和(除自身外),则称这个数为完数。从键盘上先后输入两个不大于9999的正整数m和n,若m>n,交换两数,然后求m~n间的所有完数。
```python
def find_factor(num):
factor_list = []
for i in range(1, num):
if num % i == 0:
factor_list.append(i)
return factor_list
m = int(input("请输入一个正整数m(不大于9999):"))
n = int(input("请输入一个正整数n(不大于9999):"))
if m > n:
m, n = n, m
perfect_numbers = []
for num in range(m, n+1):
factors = find_factor(num)
if sum(factors) == num:
perfect_numbers.append(num)
if len(perfect_numbers) == 0:
print("在区间[{}, {}]中没有完数".format(m, n))
else:
print("在区间[{}, {}]中的完数有:{}".format(m, n, perfect_numbers))
```
运行结果:
```
请输入一个正整数m(不大于9999):10
请输入一个正整数n(不大于9999):10000
在区间[10, 10000]中的完数有:[28, 496, 8128]
```
完数是指一个整数恰好等于它的因子之和(除自身外〉,则称这个数为完数。从键盘先后输入两个不大于9999的正整数m和n,若m-n,则交换两数。然后求man(m和n均为正整数且m≤n)之间的所有完数。
完数的判断可以通过对每个数进行因子分解,然后对其因子进行累加,如果累加结果等于该数本身,则该数为完数。可以通过循环遍历m到n之间的所有数,对每个数进行因子分解并累加。如果当前数的累加结果等于其本身,则输出该数。以下是示例代码:
```python
def get_factors(num):
"""
返回num的因子(除了num本身)
"""
factors = []
for i in range(1, num):
if num % i == 0:
factors.append(i)
return factors
m = int(input("请输入m:"))
n = int(input("请输入n:"))
if m > n:
m, n = n, m # 如果m大于n,则交换两数
for num in range(m, n + 1):
factors = get_factors(num)
if sum(factors) == num:
print(num)
```
如果输入m为1,n为10000,则输出:
```
6
28
496
8128
```
阅读全文