所以我有一个类计算两个素数,然后检查它们是否是素数
import java.util.*;
import java.math.*;
public class GeneratePrime{
public static BigInteger calculatePPrime() {
BigInteger pRandom;
while (true) {
pRandom = new BigInteger(512, new Random());
pRandom = pRandom.setBit(0);
if(isPrime(pRandom)){
System.out.println("Got Random Prime P: "+pRandom);
break;
}
}
return pRandom;
}
public static BigInteger calculateQPrime() {
BigInteger qRandom;
while(true){
qRandom = new BigInteger(512, new Random());
if(isPrime(qRandom)){
System.out.println("Got Random Prime Q: "+qRandom);
break;
}
}
return qRandom;
}
public static boolean isPrime(BigInteger number) {
if (!number.isProbablePrime(5))
return false;
BigInteger two = new BigInteger("2");
if (!two.equals(number) && BigInteger.ZERO.equals(number.mod(two)))
return false;
for (BigInteger i = new BigInteger("3"); i.multiply(i).compareTo(number) < 1; i = i.add(two)) {
if (BigInteger.ZERO.equals(number.mod(i)))
return false;
}
return true;
}
}
这或多或少是我在互联网上找到的东西的集合体。这个类最初没有使用任何 BigIntegers,但后来我发现我需要在我的作业中使用它,所以我不得不从头开始做这个。
无论如何。我不能使用任何内置函数来计算素数(idk,如果有的话)。我的问题是,当我在以下位置运行此代码时:
import java.util.*;
import java.math.*;
public class RSA{
public static void main(String[] args) {
BigInteger p, q;
GeneratePrime gp = new GeneratePrime();
p = gp.calculatePPrime();
q = gp.calculateQPrime();
}
}
这两个类都编译得很好,但是当我运行 RSA 类时,没有任何反应。没有错误没有什么。我的终端是空白的。有谁知道为什么?或者任何人都可以看到这段代码是否可以在他们的机器上运行?我知道我可能在这里错过了一些愚蠢的东西。谢谢
最佳答案
您想获得随机素数吗?然后在您的代码中明确说明:
public BigInteger randomPrime(int bits, Random random) {
return new BigInteger(bits, random).nextProbablePrime();
// or
// return BigInteger.probablePrime(bits, random);
}
使用您可以随意使用的方法,在本例中为:nextProbablePrime()
。这个方法比你写的那组方法要高效得多。这将显着提高您的应用程序。
然后您的 RSA 类可以变成:
import java.util.*;
import java.math.*;
public class RSA{
public static void main(String[] args) {
BigInteger p, q;
GeneratePrime gp = new GeneratePrime();
Random random = new Random();
int bits = 512;
p = gp.randomPrime(bits, random);
q = gp.randomPrime(bits, random);
}
}
关于java - 运行我的代码时没有任何反应 [BigInteger],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40764268/