【问题标题】:What are better methods of generating prime numbers [duplicate]生成素数的更好方法是什么[重复]
【发布时间】: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 &lt;= i &amp;&amp; brake == 0;你不需要index 变量,因为add 无论如何都会附加到列表的末尾。但是还有很多其他方法可以计算素数,“更好”取决于您的质量标准;筛子(例如 Eratosthenes 筛子)可能更快。

标签: java


【解决方案1】:

您可以使用Sieve 方法来生成具有更好时间复杂度的素数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2017-10-05
    • 2011-12-24
    • 2014-05-03
    • 2013-06-09
    • 1970-01-01
    • 2015-06-10
    相关资源
    最近更新 更多