Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 给大整数赋值_Java_Biginteger_Bigint - Fatal编程技术网

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