如何找到小于 n 的最大素数,其中 n ≤ 10¹⁸ ?请帮我找到一个有效的算法。
for(j=n;j>=2;j--) {
if(j%2 == 1) {
double m = double(j);
double a = (m-1)/6.0;
double b = (m-5)/6.0;
if( a-(int)a == 0 || b-(int)b == 0 ) {
printf("%llu\n",j);
break;
}
}
}
我使用了这种方法,但这对于解决 n>10^10 并不有效;
这个怎么优化。。
编辑: 解决方案:对每个 j 使用素性测试。