我想在java中生成一个160位的素数。我知道我必须循环遍历所有160位数字和任何数字n
,我必须检查它们是否可被任何小于sqroot(n)
的素数或任何素数整除像Miller-Rabin test
一样测试。我的问题是:
是否有任何特定的库可以执行此操作?
还有其他(更好)的方法吗?
答案 0 :(得分:15)
BigInteger.probablePrime(160, new Random())
生成的BigInteger
几乎肯定是素数 - 它不素数的概率小于你被闪电击中的概率。通常,BigInteger
已经经过严格测试和优化的内置素性测试操作。
对于它的价值,这不会永远的原因是,通过素数定理,随机选择的n位数具有与素数的1 / n成比例的概率,因此平均而言,您只需要尝试O(n)不同的随机n位数,然后才能找到一个素数。