TA的每日心情 | 开心 2024-1-5 22:47 |
---|
签到天数: 1231 天 [LV.10]大乘
|
本帖最后由 黑洞的颜色 于 2014-8-29 12:05 编辑
这个要佩服一下。能够直接看到乘数的结果的确是天才。
我的方法要直接一点,和你的方法原理是一样的,只不过注意到了进位关系而已。看到这个时已经差不多写完了,还是做个记录吧。
原理
1. abcd*8889=abcd*(10000-1111)=abcd0000 – abcd*1111=???*10000+ABCD,
2. 只要考虑最后四位数字, 所以只有最后四位有关系。就是
10000-( abcd*1111)之最后四位=ABCD,
也即
( abcd*1111)之最后四位=10000-ABCD=MNOP 为四位数字(M可能为0)
3. 列出竖式乘法
abcd
× 1111
= abcd
abcd
abcd
abcd
= ……….MNOP 是刚才得到的最后四位数。
显然
1) P=d,
2) O = c+d 的个位数=mod(c+d) 。
即我们定义mod(X)为数X的个位数。例如mod(3)=3; mod(12)=2; mod(10)=0.
在这一步可能有进位,也就是说c+d=O或者 c+d=10+O(进位)。为了以下说明方便,统一写成c+d=yO。即y=c+d可能的进位。进位时y=1, 否则y=0。
这样我们容易写出c=yO-d, 并且当O<d时 y=1
例如O=9,d=8,则 c=mod(09-8)=1;
又如O=2,d=8,则 c=mod(12-8)= 4
3) N = (b+c+d+y) 的个位数=mod(b+c+d+y)。y 是c+d可能的进位。
看上去复杂,其实除了未知b以外,等式右边真正有需要的只有c+d+y的个位数 , 记为x=mod(c+d+y)。
现在理解的关键在这一步:x就是c+d的各位数字之和。
例如 c=7, d=8 则c+d=15,其各位数字之和 x=1+5;
再例如c=1,d=2 则c+d=3, x=3;
再例如c=2,d=8, x=1。
也就是说不断的加数字直到只剩下1位。
得到x之后我们就回到了2),只要计算N=mod(b+x), 可同理得
b=zN-x, z=1 if N<x。
4) M=(a+b+c+d+z) 的个位数, 推理同上
这种方法没有特殊情况需要记忆,所以想明白之后计算起来很快。如果考虑到MNOP和ABCD的关系,基本上就是你的算法了。
这个说起来特别麻烦,实际上要是对模数和进位有了解的话(比如程序员),以上推理都不要,基本就能看出来。我猜二当家的就是用了近似的思路。
|
|