我正在用Java写一个代码来查找质数,但是要找到下一个,我需要使用具有8761位数字[P]的质数(使用此代码找到)以及在给定范围内另一个小于P的质数,对现在,我正在寻找2.5亿范围内的质数。

问题是找到此范围内的所有素数。我使用了erasthostenes筛子,在速度变慢之前将其从125M(奇数)增加到600万个可能的质数。但这距离我还很远。

由于BigInteger的.isPrime(1)需要3分钟才能获取每个数字,因此我在完成此操作之前会在大学里生孩子。

在我的代码中,我使用P和PRP之间的距离来避免使用bigIntegers。我也将其存储在读取和写入的.txt文件中。这是我的代码的一小部分:

//Stores PRPs to List<Long> Erros = new ArrayList();

BigInteger Primo = new BigInteger("1");

while (Primo.longValueExact() <= Max){

        while(Erros_Eliminados.size() < 200000){

            Primo = Primo.nextProbablePrime();
            BigInteger R1 = BPrimo_Dado.mod(Primo); //[BPrimo_Dado = P = 8761 Digits number]

            long R = R1.longValue();

            while(R <= Max){ //Max = 250000000

                if(R >= Min){ //Min = 0

                    Erros_Eliminados.add(R);

                }

                R += Primo.longValue();

            }

        }

        ...
        //removes the ErrosEliminados from Erros List and save it again to .txt

}


**我还对250M到10亿之间的素数使用相似的代码,大于10亿的素数(从位列表中读取)有一些细微变化...

所以问题是:找到那些大素数的最快方法是什么?有没有比筛子更好的方法?我对任何事情都开放...

PS:这是我的第一个问题,考虑到我的问题有点奇怪,我很有可能违反一些行为准则,例如含糊或类似的内容,请原谅我,请告诉我以便我可以解决任何问题。

最佳答案

BigInteger类可以为您生成大的素数:BigInteger.probablePrime(),还可以找到下一个素数:BigInteger.nextProbablePrime()

09-11 19:18
查看更多