用Java输出一万到两万之间的完数
时间: 2024-10-08 09:04:05 浏览: 17
在Java中,完数是指一个数的所有真因数(除了自身以外的正因子)之和等于该数本身的自然数。为了找出一万到两万之间的所有完数,我们可以编写一个循环遍历这个范围,并对每个数进行因子求和,如果因子和等于原数,则它是完数。
以下是一个简单的示例代码:
```java
public class PerfectNumbers {
public static void main(String[] args) {
int start = 10000;
int end = 20000;
for (int num = start; num <= end; num++) {
long sum = 0;
for (long i = 1; i < num; i++) {
if (num % i == 0) { // 如果i是num的因子
sum += i; // 将因子加到总和中
}
}
if (sum == num && isPerfectSum(num)) { // 检查因子和是否真的完美
System.out.println("数字 " + num + " 是在 " + start + " 到 " + end + " 范围内的完美数.");
}
}
}
// 辅助函数,检查给定的数的因子和是否完全由质数组成
private static boolean isPerfectSum(int num) {
for (long factor : divisors(num)) {
if (!isPrime(factor)) { // 如果因子不是质数,返回false
return false;
}
}
return true; // 所有因子都是质数,说明因子和是由质数组成
}
// 获取一个数的所有质数因子
private static Stream<Long> divisors(long n) {
return Stream.iterate(2, x -> x + 1)
.limit(n - 2) // 避免计算n本身和1
.filter(x -> n % x == 0);
}
// 判断一个数是否为质数
private static boolean isPrime(long num) {
if (num <= 1) {
return false;
}
for (long i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
```
当你运行这段代码,它会打印出一万到两万之间所有的完美数。注意,这种方法可能会比较慢,因为对于较大的数,需要计算很多因子。