我想知道数论是否有一个技巧可以在不需要实现BigInt除法的情况下计算这个余数。
哈哈,很简单!
我可以迭代所有数字,添加每个包裹。。。使用属性:
1) (a+b)mod c=(a mod c+b mod c)mod c
2) (a*b)mod c=(a mod c*b mod c)mod c
每走一步,10的幂可以增加1500。
它很简单,只需检查以下三件事:
可除以1500
- 它必须可以被100整除(最后两位必须是
00
) - 它必须可以被5整除(从右边起的第三个数字必须是
0
或5
) - 它必须能被3整除(迭代所有数字,求和,结果必须能被三整除)
如果你想知道剩余部分,它也很简单:
检查是否可被5整除并获得余数
- 用
500
除后的最后4位得到余数,它将是从0
到499
检查是否可被3整除并获得余数
-
对所有数字进行迭代,求和,然后除以
3
得到余数,即从0
到2
。 -
并且根据该余数将来自第一步的余数乘以该余数乘以CCD_ 10。
示例1
1234567890 % 1500 = 390
7890 % 500 = 390
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0 = 45
和45 % 3 = 0
,所以不需要向390
添加任何内容,结果就是390
示例2
12345678901 % 1500 = 901
8901 % 500 = 401
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0 + 1 = 46
和46 % 3 = 1
,所以我们必须将1 * 500
添加到第一步的结果中,所以401 + 1 * 500 = 901
示例3
1357913579 % 1500 = 1079
3579 % 500 = 79
1 + 3 + 5 + 7 + 9 + 1 + 3 + 5 + 7 + 9 = 50
和50 % 3 = 2
,所以我们必须将2 * 500
添加到第一步的结果中,所以79 + 2 * 500 = 1079
希望这对你有帮助。