我已经搜索了确定数字是否为素数的方法,但大多数方法要么是概率的(米勒拉宾),要么是小于 64 位的数字。
另一种解决方案是使用带有一些改进或筛子的蛮力方法,但是当数字超过 64 位阈值时,这两种方法都不是很有效。
你要找的东西不存在。没有简单的确定性素性检验始终适用于所有整数范围。
您已经了解 Miller-Rabin 检验。它可以在特定范围内确定;有关详细信息,请参见此处或此处。如果您假设黎曼假设,那么对于所有整数a且 1 < a < 2(log n )² ,如果n是a -SPRP(米勒强伪素数),则n是素数。Baillie-Wagstaff 测试是一个类似但更好的测试。它不是确定性的,但没有已知的失败。
对于n到 2 128的数字,分解n - 1 并使用 Pocklington 检验来证明素数并不难。您可以使用试除法、Pollard rho 或 ECM 来执行分解。还有一些测试 ( BLS75 ) 可以基于部分分解来证明素数。较大的n也可以使用 Pocklington 检验证明是素数,尽管有时分解变得困难。
对于高达约 10 1000的n,快速 ECPP 素数测试并非不合理,但对于该范围内的较大数字,可能需要一段时间。除此之外,除非您的号码有某种特殊形式,否则您几乎不走运。
我会假设你想要的是一个可证明的正确答案,而不是完全避免随机性。