用java编写程序,找出1-999中的所有完数和丑数: 完数:所有真因数之和等于本身的数(设计一个方法判断是否为完数 isPerNum(num)) 丑数:不能被2、3、5以外的其他素数整除的数(isUglyNum(num))
时间: 2024-10-15 12:24:22 浏览: 26
在Java中,我们可以编写两个方法`isPerfectNum()`和`isUglyNum()`分别用于检查一个数是否是完数或丑数。首先,我们需要一些辅助函数,如找到一个数的所有因子和检查一个数是否为质数。
```java
import java.util.ArrayList;
import java.util.List;
public class NumberUtils {
// 判断一个数是否是质数
private static boolean isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
// 找到一个数的所有因子
private static List<Integer> getFactors(int num) {
List<Integer> factors = new ArrayList<>();
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) factors.add(i);
}
return factors;
}
// 判断是否为完数
public static boolean isPerfectNum(int num) {
int sum = 1;
for (int factor : getFactors(num)) {
if (factor > sum) break;
sum += factor;
}
return sum == num;
}
// 判断是否为丑数
public static boolean isUglyNum(int num) {
while (num != 0) {
int reminder = num % 2;
if (!reminder) num /= 2;
else if (num % 3 == 0) num /= 3;
else if (num % 5 == 0) num /= 5;
else return false; // 如果num不能被2、3、5整除,说明它不是丑数
}
return num == 1; // 只有1是丑数
}
// 主函数,遍历并打印1到999中的完数和丑数
public static void main(String[] args) {
for (int i = 1; i <= 999; i++) {
if (isPerfectNum(i)) System.out.println("完美数:" + i);
if (isUglyNum(i)) System.out.println("丑数:" + i);
}
}
}
```
在这个程序中,我们遍历1到999的每一个数字,然后使用`isPerfectNum()`和`isUglyNum()`方法来判断它们是否为完数和丑数。如果满足条件,就将结果打印出来。
阅读全文