java实现【输入形式】一个正整数n(不超过10000) 【输出形式】 输出1~n以内的完全数,并输出每个完数的真因子。完数及各真因子之间用空格隔开,一个完数一行
时间: 2023-06-13 11:03:17 浏览: 106
以下是Java实现:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class PerfectNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = 2; i <= n; i++) {
if (isPerfectNumber(i)) {
System.out.print(i + " ");
List<Integer> divisors = getDivisors(i);
for (int divisor : divisors) {
System.out.print(divisor + " ");
}
System.out.println();
}
}
}
// 判断一个数是否为完全数
public static boolean isPerfectNumber(int num) {
List<Integer> divisors = getDivisors(num);
int sum = 0;
for (int divisor : divisors) {
sum += divisor;
}
return sum == num;
}
// 获取一个数的真因子
public static List<Integer> getDivisors(int num) {
List<Integer> divisors = new ArrayList<>();
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) {
divisors.add(i);
}
}
return divisors;
}
}
```
解释一下程序的思路:
1. 首先读入一个正整数n。
2. 从2开始遍历到n,如果当前数是完全数,则输出该数和它的真因子。
3. 判断一个数是否为完全数的方法是:获取该数的所有真因子(除了自身以外的因子),将它们相加,如果和等于该数,则该数为完全数。
4. 获取一个数的真因子的方法是:从1到num/2遍历所有可能的因子,如果能整除,则将该数加入真因子列表中。
例如,当输入为6时,输出为:
```
6 1 2 3
```
阅读全文