我写了这段代码,该代码应该搜索素数并将其放入数组中。这里是:
int[] prime_array = new int[(int)s.upper_bound];
int index_in_array = 0;
boolean are_we_done = false;
int index = 1;
boolean is_prime = true;
while (!are_we_done) {
try {
for (int i = 1; i < index; i++) {
if ((index%i)==0) {
is_prime = false;
}
}
if (is_prime) {
prime_array[index_in_array] = index;
index_in_array++;
}
index++;
is_prime = true;
}
catch (IndexOutOfBoundsException e) {
are_we_done = true;
break;
}
}
不幸的是,它捕捉到的唯一素数是1。为什么不起作用?
最佳答案
您的for
循环正在寻找以i=1
开头的因数,如果index%i==0
您认为它不是素数。但是n%1==0
对于所有整数n
。
表示某些东西不是素数的最低因素是2
。
编辑:
以下是一些其他建议:
使用适当的有界循环在候选素数之间循环。
仅检查不超过候选素数平方根的因子。
仅检查2和奇数作为质数(因为2之前的偶数都不是质数,而1是单位而不是质数)
仅检查2和奇数作为因子(因为2之前的偶数都不是质数)
请使用sieve。