我正在研究一个问题,它要求得到2 ^ 1001的最后100位数字。解决方案必须在java中,不使用BigInteger,只能使用int或Long。目前我想创建一个处理100位数的类。所以我的问题是,如果有另一种方法使用int或long处理溢出来获得100位数字。
谢谢大家。
答案 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次,你就完成了。