(3)写一个命令行程序, 要求:输出内的所有素数,按每行5个打印出来,并分析程序中最费时的函数是什么,如何改进?java
时间: 2024-09-20 18:05:50 浏览: 66
PrimeNumberBasic:这是一个用C ++编写的基本命令行应用程序,用于计算所有质数直到您选择的数字
编写一个命令行程序,找出并打印一定范围内的素数,可以按照以下步骤完成:
```java
import java.util.ArrayList;
import java.util.List;
public class PrimeNumbers {
public static void main(String[] args) {
int limit = 100; // 指定查找素数的最大值
List<Integer> primes = findPrimes(limit);
// 打印素数,每行5个
for (int i = 0; i < primes.size(); i += 5) {
if (i + 5 <= primes.size()) {
System.out.println("第 " + (i+1) + " 行:");
for (int j = i; j < i + 5; j++) {
System.out.print(primes.get(j) + " ");
}
System.out.println();
} else {
System.out.println("剩余:" + primes.subList(i, primes.size()));
break;
}
}
}
// 判断是否为素数的辅助函数
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> findPrimes(int n) {
List<Integer> primeList = new ArrayList<>();
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
primeList.add(i);
}
}
return primeList;
}
}
```
在这个程序中,`isPrime`函数是最耗时的部分,因为它需要遍历从2到数字平方根的所有整数来进行判断。对于大规模的素数查找,效率不高。
为了改进这个函数,我们可以考虑采用更高效的算法如“埃拉托斯特尼筛法”(Sieve of Eratosthenes),它能在较短的时间内找到一定范围内所有的素数。不过,这将改变整个代码结构,可能会增加一定的复杂性。如果只是针对较小范围的素数查找,上述简单实现已经能满足需求。
阅读全文