完数是指一个整数怡好等于它的因子之和(除自身外),则称这个数为完数。从键盘先后输入两个不大于999g的正整数m和n,若m-n,则交换两数。然后求m~n (m和n均为正整数且以<八)之间的所有完数。
时间: 2023-05-24 11:04:15 浏览: 244
实现思路:
1. 定义函数isPerfectNum(num),判断num是否为完数。
2. 从键盘输入两个正整数m和n,并判断是否满足m<n,若不满足则交换两数的值。
3. 循环遍历m~n之间的所有整数,判断是否是完数,若是则输出该数。
Python代码:
```python
def isPerfectNum(num):
"""
判断num是否是完数
"""
if num <= 1:
return False
sum = 1 # 1一定是num的因子
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
sum += i
if i != num // i:
sum += num // i
return sum == num
m = int(input("请输入正整数m(m ≤ 999):"))
n = int(input("请输入正整数n(n ≤ 999):"))
if m > n:
m, n = n, m # 交换两数的值,保证m始终小于n
perfectNums = [] # 用来存放所有完数
for i in range(m, n+1):
if isPerfectNum(i):
perfectNums.append(i)
if len(perfectNums) == 0:
print("在", m, "和", n, "之间没有完数。")
else:
print("在", m, "和", n, "之间的完数有:", perfectNums)
```
测试结果:
```
请输入正整数m(m ≤ 999):1
请输入正整数n(n ≤ 999):100
在 1 和 100 之间的完数有: [6, 28]
```
```
请输入正整数m(m ≤ 999):50
请输入正整数n(n ≤ 999):30
在 30 和 50 之间的完数有: [6, 28]
```
阅读全文