【发布时间】:2021-07-14 05:58:32
【问题描述】:
我编写了一个生成素数的程序。有更好的方法吗?另外,我该如何改进自己的方法。
public static void main(String[] args) {
ArrayList<Integer> primeNumbers = new ArrayList<Integer>(primeNumberGenerator(1000));
System.out.println(primeNumbers);
}
public static ArrayList<Integer> primeNumberGenerator(int range){
ArrayList<Integer> primeNumbers = new ArrayList<Integer>();
int brake = 0;
int index = 0;
for(int i = 2; i < range; i++){
brake = 0;
for(int p = 2; p < range; p++){
if((i%p) == 0 && i != p && brake == 0){
brake = 1;
}
}
if(brake == 0){
primeNumbers.add(index, i);
index += 1;
}
brake = 0;
}
return primeNumbers;
}
【问题讨论】:
-
这个算法有很多变种。查看维基百科:en.wikipedia.org/wiki/… 不要忽视
BigInteger.nextProbablePrime()。 -
正如我上次你问这个问题时评论的那样:
brake应该是一个布尔值;你的内循环条件可能是p*p <= i && brake == 0;你不需要index变量,因为add无论如何都会附加到列表的末尾。但是还有很多其他方法可以计算素数,“更好”取决于您的质量标准;筛子(例如 Eratosthenes 筛子)可能更快。
标签: java