如何获得2次幂的最后数字

时间:2012-11-25 03:04:44

标签: java biginteger

我正在研究一个问题,它要求得到2 ^ 1001的最后100位数字。解决方案必须在java中,不使用BigInteger,只能使用int或Long。目前我想创建一个处理100位数的类。所以我的问题是,如果有另一种方法使用int或long处理溢出来获得100位数字。

谢谢大家。

2 个答案:

答案 0 :(得分:3)

编辑:我的模数运算符(oops)中有几个10的幂函

2 ^ 1001的最后100位数是2 ^ 1001(mod 10 ^ 100)。

注意2 ^ 1001(mod 10 ^ 100)= 2 *(2 ^ 1000(mod 10 ^ 100))(mod 10 ^ 100)。

查看模数的属性:http://www.math.okstate.edu/~wrightd/crypt/lecnotes/node17.html

这是99%的数学问题,1%的编程问题。 :)

但是,使用这种方法,您将无法仅使用整数,因为10 ^ 100不适合int或long。

但是,您可以使用它来查找2 ^ 1001的最后10位数字,然后使用单独的例程查找接下来的10位数等,其中每个例程都使用此功能...

答案 1 :(得分:2)

最快的方法(编码方式)是创建一个包含100个整数的数组,然后有一个函数从一个位置开始,每个数字加倍。如果需要,确保取10的模数并保持1s。对于第100位数字,只需消除结转。做1001次,你就完成了。