Java 给大整数赋值
我想是的Java 给大整数赋值,java,biginteger,bigint,Java,Biginteger,Bigint,我想是的 BigInteger n; 我可以给n赋值而不使其溢出吗?比如说, p = new BigInteger(512*512*512, 15, new Random()); n=p; 这是因为我制作了RSA alg。有时它给了我正确的值,有时它给了我错误的值,我想确保我不会在某个地方溢出 如果溢出是问题,我应该,或者我应该如何初始化我的bigint 我可以给n赋值而不使其溢出吗 BigInteger可以表示的内容是有限的。正如政府所说: “biginger必须支持-2Integer.M
BigInteger n;
我可以给n赋值而不使其溢出吗?比如说,
p = new BigInteger(512*512*512, 15, new Random());
n=p;
这是因为我制作了RSA alg。有时它给了我正确的值,有时它给了我错误的值,我想确保我不会在某个地方溢出
如果溢出是问题,我应该,或者我应该如何初始化我的bigint
我可以给n赋值而不使其溢出吗
BigInteger
可以表示的内容是有限的。正如政府所说:
“biginger
必须支持-2Integer.MAX_值(独占)到+2Integer.MAX_值(独占)范围内的值,并且可能支持该范围以外的值。”
后来,它说:
“biginger
当结果超出支持的范围时,构造函数和操作将抛出arithmetricexception
。”
。。。因此,不会出现未通知的溢出(与基本整数类型类似)或类似INF/NaN的值(如浮点类型)
还有一个问题是,如果堆已满/太小,创建一个大的
biginger
将抛出一个OOME
如果溢出是个问题 在您的示例中,
biginger
代码中的溢出不是问题所在。你会看到一些例外
此外,表达式512*512*512
不会溢出。(但通常情况下,构造函数参数表达式中可能会出现溢出……因为这些计算通常使用原语整数算术完成,而原语整数算术会悄悄溢出。)
(迂腐地说,…赋值n=p;
是一个引用赋值,不能溢出或抛出OOME。好吧,在Java模型的上下文中,它是不可能失败的。您需要硬件错误、电源故障、堆损坏、代码生成错误等)
我可以给n赋值而不使其溢出吗
BigInteger
可以表示的内容是有限的。正如政府所说:
“biginger
必须支持-2Integer.MAX_值(独占)到+2Integer.MAX_值(独占)范围内的值,并且可能支持该范围以外的值。”
后来,它说:
“biginger
当结果超出支持的范围时,构造函数和操作将抛出arithmetricexception
。”
。。。因此,不会出现未通知的溢出(与基本整数类型类似)或类似INF/NaN的值(如浮点类型)
还有一个问题是,如果堆已满/太小,创建一个大的
biginger
将抛出一个OOME
如果溢出是个问题 在您的示例中,
biginger
代码中的溢出不是问题所在。你会看到一些例外
此外,表达式512*512*512
不会溢出。(但通常情况下,构造函数参数表达式中可能会出现溢出……因为这些计算通常使用原语整数算术完成,而原语整数算术会悄悄溢出。)
(迂腐地说,…赋值
n=p;
是一个引用赋值,不能溢出或抛出OOME。好吧,在Java模型的上下文中,它是不可能失败的。您需要一个硬件错误、电源故障、堆损坏、代码生成错误等…因为您正在谈论RSA算法,我怀疑这就是你想要写的代码:
Random rand = new Random();
BigInteger p = new BigInteger(512, 15, rand); // A random prime
BigInteger q = new BigInteger(512, 15, rand); // Another random prime
BigInteger n = p.multiply(q); // The product of the two primes
既然你说的是RSA算法,我想这就是你真正想写的代码:
Random rand = new Random();
BigInteger p = new BigInteger(512, 15, rand); // A random prime
BigInteger q = new BigInteger(512, 15, rand); // Another random prime
BigInteger n = p.multiply(q); // The product of the two primes
您不应执行
n=p
,这将分配引用;嗯,这仍然不能解释为什么有时我得到正确的值,有时我得到错误的值。或者可能是这样?不要使用字符串Numbers@GeorgeIrimiciuc但要存储位长为512的三个数字的乘积,您只需要1536位长度,而不是512^3。基本上,您需要512*3位,而不是512^3,来表示三个数字的乘积,每个数字有512位。您不应该执行n=p
,这将分配引用;嗯,这仍然不能解释为什么有时我得到正确的值,有时我得到错误的值。或者可能是这样?不要使用字符串Numbers@GeorgeIrimiciuc但要存储位长为512的三个数字的乘积,您只需要1536位长度,而不是512^3。基本上,您需要512*3位,而不是512^3,来表示三个数字的乘积,每个数字有512位。因此。。。根据这个,他的大整数应该不会溢出,对吗?512^3只是2^27,这足够小了,对吧?所以。。。根据这个,他的大整数应该不会溢出,对吗?512^3只是2^27,足够小了,对吗?特别是,当您编写新的BigInteger(512*512*512,…)
时,您试图创建一个134217728位素数,这肯定不是您想要的。事实上,我正试图生成私钥e
。我生成它,直到它gcd(e,n)=1
和特别是,当您编写新的BigInteger(512*512*512,…)
时,您试图创建一个134217728位的素数,这肯定不是您想要的。实际上,我试图生成私钥e
。我生成它,直到它gcd(e,n)=1
和e