用java编写程序,从控制台读入一个合数(合数的大小不会超过int数据类型表示的范围),求这个合数可以分解成的只出现一次的素数。输出形式:在标准输出上按照由小到大的顺序输出分解后的只出现一次的素数,各素数之间以一个空格分隔,最后一个素数后也可以有一个空格。若没有只出现一次的素数,则什么都不输出。
时间: 2024-02-22 17:58:48 浏览: 74
好的,我会为您解答这个问题。
以下是实现该功能的 Java 代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<Integer> primes = new ArrayList<>();
for (int i = 2; i <= n; i++) {
while (n % i == 0) {
primes.add(i);
n /= i;
}
}
primes.sort(Integer::compareTo);
List<Integer> res = new ArrayList<>();
for (int i = 0; i < primes.size(); i++) {
int p = primes.get(i);
if ((i == 0 || p != primes.get(i - 1)) && (i == primes.size() - 1 || p != primes.get(i + 1))) {
res.add(p);
}
}
for (int i = 0; i < res.size(); i++) {
System.out.print(res.get(i) + (i == res.size() - 1 ? "" : " "));
}
}
}
```
实现思路如下:
首先,使用 Scanner 类从控制台读入一个整数 n。
然后,从 2 开始循环到 n,每次判断 i 是否是 n 的因子,如果是,则将 i 加入到一个 List 中,并将 n 除以 i,重复这个过程直到 n 无法被 i 整除。
接着,将这个 List 中的元素按照从小到大的顺序排序。
最后,遍历排序后的 List,对于每个只出现一次的素数,将其加入到另一个 List 中。最后,按照题目要求输出这个 List 中的元素。
注意,最后一个素数后面不能有空格,因此需要特判一下。
希望能帮助到您!
阅读全文