我必须为大学实施DSA,发现数字 q 时遇到问题,该数字是 p-1 的素数,其中p是素数。我试图编写一些怪异的循环,但它仅适用于较小的 p 值。我猜用512位长素数会花很多时间。 我使用Java和BigInteger库实现。
编辑:
public BigInteger[] generatePAndQ(){
BigInteger q = BigInteger.probablePrime(160, new Random());
BigInteger k = BigInteger.valueOf(2); // k = 2
BigInteger probablyPrime = q.multiply(k).add(BigInteger.ONE); // probablyPrime = q * k + 1
while(!isPrime(probablyPrime)){
q = BigInteger.probablePrime(160, new Random());
probablyPrime = q.multiply(k).add(BigInteger.ONE);
}
BigInteger[] qAndP = new BigInteger[2];
qAndP[0] = q;
qAndP[1] = probablyPrime;
return qAndP;
}
答案 0 :(得分:2)
我不确定您在做什么,但是这段代码说明了我的评论。通常,它在笔记本电脑上的运行时间不到0.5秒。
plot2d
q,p和k的边界又快又脏,应该清理。