任何一个大于1的非素数整数(即合数)都可以唯一分解成若干个素数的乘积。编写程序,从控制台读入一个合数(合数的大小不会超过int数据类型表示的范围),求该合数分解成素数的最小集。该最小素数集由合数分解成的素数组成,并且对重复的素数去重。按从小到大的顺序输出求得的最小素数集。java
时间: 2024-11-30 13:21:51 浏览: 6
输入一个正整数,判断是不是素数(C++)
在Java中,我们可以编写一个简单的程序来实现这个功能。首先,我们需要创建一个函数来检查一个数是否是素数,然后通过循环分解输入的合数。以下是实现的基本步骤:
```java
import java.util.ArrayList;
import java.util.Scanner;
public class PrimeFactorization {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个合数:");
int num = scanner.nextInt();
ArrayList<Integer> primeFactors = getPrimeFactors(num);
// 去重并按升序排序
primeFactors = removeDuplicatesAndSort(primeFactors);
System.out.println("合数 " + num + " 分解成素数的最小集为:");
for (int factor : primeFactors) {
System.out.print(factor + " ");
}
}
// 检查一个数是否为素数
private static boolean isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
// 获取合数的所有质因数
private static ArrayList<Integer> getPrimeFactors(int num) {
ArrayList<Integer> factors = new ArrayList<>();
for (int i = 2; i <= num; i++) {
while (num % i == 0 && isPrime(i)) { // 如果i能整除num且是质数
factors.add(i);
num /= i; // 更新num为除以i后的结果
}
}
return factors;
}
// 去重并排序数组
private static ArrayList<Integer> removeDuplicatesAndSort(ArrayList<Integer> list) {
list.sort(Integer::compareTo); // 先排序
return new ArrayList<>(new HashSet<>(list)); // 使用HashSet去重,再转换回ArrayList
}
}
```
阅读全文