找到给定范围内的大素数(~8000位)

时间:2016-11-19 16:07:30

标签: java primes biginteger

我在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:这是我的第一个问题,鉴于我的问题有点奇怪,我很有可能打破一些行为规则,比如模糊或类似的事情,请原谅我,如果是这样的话请告诉我,我可以解决任何问题。

1 个答案:

答案 0 :(得分:2)

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