求正整数2和n之间的所有完全数【C/C++/Java/Python】 描述 求正整数2和n(n≤30000)之间的所有完全数,一行输出一个。 所谓完全数:因子之和等于它本身的自然数,如6=1+2+3,注意因子包括1但不包括自身。 格式 输入格式 输入n。 输出格式 一行一个数,按由小到大的顺序。 样例 输入样例 7 输出样例 6 限制 时间限制:1500 ms 内存限制:65536 KB
时间: 2023-12-05 17:10:51 浏览: 175
以下是 Python 代码实现:
```python
import math
def get_factors(n):
factors = [1]
for i in range(2, int(math.sqrt(n))+1):
if n % i == 0:
factors.append(i)
factors.append(n // i)
if int(math.sqrt(n)) ** 2 == n:
factors.remove(int(math.sqrt(n)))
return factors
n = int(input())
for i in range(2, n+1):
factors = get_factors(i)
if sum(factors) == i:
print(i)
```
这段代码首先定义了一个 `get_factors` 函数用来获取一个数的因子列表,然后读入一个数 `n`,接着用一个循环遍历区间 `[2, n]` 中的每个数,获取其因子列表并求和,判断是否为完全数。如果是完全数,则输出该数即可。
相关问题
求正整数2和n之间的所有完全数【c/c++/java/python】
在c语言中,可以使用如下代码实现:
#include <stdio.h>
int isPerfectNumber(int num)
{
int sum = 1;
for (int i = 2; i*i <= num; i++)
{
if (num % i == 0)
{
sum += i;
if(i*i != num)
sum += num / i;
}
}
if (sum == num && num != 1)
return 1;
return 0;
}
int main()
{
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
printf("2和%d之间的完全数有:\n", n);
for (int i = 2; i <= n; i++)
{
if (isPerfectNumber(i))
printf("%d ", i);
}
return 0;
}
在java语言中,可以使用如下代码实现:
public class PerfectNumber {
public static boolean isPerfectNumber(int num) {
int sum = 1;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
sum += i;
if (i * i != num) {
sum += num / i;
}
}
}
return sum == num && num != 1;
}
public static void main(String[] args) {
int n = 100;
System.out.printf("2和%d之间的完全数有:\n", n);
for (int i = 2; i <= n; i++) {
if (isPerfectNumber(i)) {
System.out.printf("%d ", i);
}
}
}
}
在python语言中,可以使用如下代码实现:
def isPerfectNumber(num):
sum = 1
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
sum += i
if i * i != num:
sum += num // i
return sum == num and num != 1
def main():
n = 100
print(f"2和{n}之间的完全数有:")
for i in range(2, n + 1):
if isPerfectNumber(i):
print(i, end=' ')
if __name__ == "__main__":
main()
阅读全文