将素数添加到某个arraylist

时间:2014-05-05 16:21:55

标签: java arraylist primes

我正在实施一个解决this problem的程序。在我的算法中,我使用的事实是,如果一个奇数不能被任何较小的素数整除,那么它本身就是素数。 所以我做了一个循环,将一个数字递增2,并检查它是否可以被ArrayList中较小的素数整除。如果不是,它将被添加到该ArrayList。

问题是当观察变量时,25,35,45 ......等被添加到该列表中! 这是我的代码:

public class q6_1 {
    static int x = 0;

    static ArrayList<Integer> primes = new ArrayList<Integer>();

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        q6_1.primes.add(3);
        for (int i = 5; i < 100000; i += 2) {
            ListIterator<Integer> li = q6_1.primes.listIterator();
            if (i % (li.next()) == 0) {
            } else {
                q6_1.x++;
                Integer toBeAdded = new Integer(i);
                li.add(toBeAdded);
                if (q6_1.x == 10001) {
                    System.out.println(i);

                }

            }
        }

    }
}

2 个答案:

答案 0 :(得分:1)

仅检查新号码是否可被列表中的第一个数字整除。因此,您只消除可被3整除的数字。

使用嵌套循环遍历列表。当素数大于要测试的数字的平方根时,您可以停止。

答案 1 :(得分:0)

您的方法效率会低一些。 2也被认为是素数。查看http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes。此外,如果您不想实际实现Sieve本身,请查看包含nextProbablyPrime的BigInteger,它本身创建了Sieve(不确定它是否是我在wiki中提供的算法或不同的算法)并提出了prime号。