Java - 素数算法实现不起作用

时间:2014-11-29 23:41:00

标签: java primes

我编写了这段代码,用于搜索素数并将它们放入数组中。这是:

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.不知道它为什么不起作用?

1 个答案:

答案 0 :(得分:5)

您的for循环正在寻找以i=1开头的因素,如果index%i==0您认为它不是素数。但n%1==0适用于所有整数n

表示某些东西不是素数的最低因子是2

编辑:

以下是其他一些建议:

  • 使用正确的有界循环来循环你的候选素数。
  • 仅检查候选素数的平方根以外的因素。
  • 只检查2和奇数作为素数(因为2以上的偶数不是素数,1是单位,不是素数)
  • 仅检查2和奇数作为因子(因为2以上的偶数不是主要因素)
  • 改为使用sieve