gpt4 book ai didi

java - 如何生成两个大于10^25的素数p1,p2

转载 作者:行者123 更新时间:2023-11-29 10:08:59 26 4
gpt4 key购买 nike

我需要生成两个大于 10^25 的素数 p1 和 p2,以及它们的乘积 n。和一个小于 n 的数字“a”。

为什么我用下面的代码,结果4个数都是0。

public static void main(String args[]) {

long min = (long) Math.pow(10, 25);
long max = Long.MAX_VALUE;
long p1 = (long)((Math.random()+1)*(max-min));
long p2 = (long)((Math.random()+1)*(max-min));
long n = p1 * p2 ;
long a = (long)((Math.random())* n) ;
System.out.println("p1= " + p1 + ", p2= " + p2 + ", n= " + n +",a= " + a);
}

谢谢。

最佳答案

您获得 0 是因为要表示 Long.MAX_VALUE,您需要 63 位,但要表示 10^25,您需要 84 位。

BigInteger maxLong = new BigInteger(String.valueOf(Long.MAX_VALUE));        
BigInteger pow_10_25 = BigInteger.TEN.pow(25);
System.out.println(maxLong.bitLength()); // 63
System.out.println(pow_10_25.bitLength()); // 84

一个可能的解决方案是使用 BigInteger:

  • 确定要使用的最小位长度
  • 生成两个可能的素数
  • 将两个生成的质数相乘

By using BigInteger.probablePrime(int, Random): "The probability that a BigInteger returned by this method is composite does not exceed 2-100."

示例:

Random r = new Random();
BigInteger pow_10_25 = BigInteger.TEN.pow(25);
int minBitLength = pow_10_25.bitLength();

BigInteger p1 = BigInteger.probablePrime(minBitLength, r);
BigInteger p2 = BigInteger.probablePrime(minBitLength, r);
BigInteger n = p1.multiply(p2);

关于java - 如何生成两个大于10^25的素数p1,p2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51932742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com