java - 运行我的代码时没有任何反应 [BigInteger]

标签 java biginteger

所以我有一个类计算两个素数,然后检查它们是否是素数

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/

相关文章:

java - <form> 标签错误-Springs MVC

php - 如何在 PHP 中处理大数?

Java:将 BigInteger 除以 3/Base 3 表示

Clojure BigInt 不是 Java BigInteger

java - 从 Math.pow 的结果构造 BigInteger 时出现 NumberFormatException

java - 你对方法范围的常量有什么看法?

java - 如何在 Java 中将 DOM 节点从一个文档复制到另一个文档?

c# - 你能解释一下这个 Math.Log10 与 BigInteger.Log10 的行为吗?

java - Maven 站点 :deploy Compile Error : "cannot find symbol" - how can a specific dependency be excluded?

Java 标题边框