我写了这段代码,该代码应该搜索素数并将其放入数组中。这里是:

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

07-25 22:33
查看更多