我正在用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()
。