Sam*_*Sam 11 math data-structures
如果我在Wolfram Alpha中输入一个值,例如1234567 ^ 98787878,它可以为我提供一些细节.这包括十进制近似,总长度,最后一位数等.您如何评估这么大的数字?据我所知,编程语言必须有一个特殊的数据类型才能存储数字,更不用说将它添加到其他东西了.虽然我可以看到人们如何接近两个非常大的数字,我看不出有多大的数字被评估.
可以通过重复添加来计算10 ^ 2.然而,诸如上述示例之类的数字将需要巨大的循环.有人可以解释如何评估这么大的数字吗?另外,有人如何创建自定义大型数据类型以支持C#中的大数字?
Dmi*_*nko 11
嗯,这很容易,你可以自己完成
可通过对数获得的位数:
以来 A^B = 10 ^ (B * log(A, 10))
我们可以(A = 1234567; B = 98787878)
在我们的案例中计算出来
B * log(A, 10)
= 98787878 * log(1234567, 10)
= 601767807.4709646...
integer part + 1
(601767807 + 1 = 601767808)是位数
首先,说,5,数字可通过以下方式得到的对数为好; 现在我们应该分析一小部分
B * log(A, 10)
= 98787878 * log(1234567, 10)
= 601767807.4709646...
f = 0.4709646...
第一个数字是
10^f
(小数点删除)= 29577 ...
最后,比方说,5,数字可以作为相应获得剩余:
最后五位= A^B rem 10^5
A rem 10^5
= 1234567 rem 10^5
= `34567
A ^ B rem 10 ^ 5 **=**
((A rem 10 ^ 5)^ B)rem 10 ^ 5 **=**
(34567 ^ 98787878)rem 10 ^ 5 =
45009`
最后五位数是45009
您可能会发现BigInteger.ModPow
(C#)在这里非常有用
最后
1234567 ^ 98787878 = 29577 ... 45009(601767808位数)