高次幂求余的思考
题记:
昨天参加了阿里巴巴的笔试,回来之后和室友分享有趣的题目。聊了之后才觉得,就是一道简单的题目也可以有多种思考,同时也验证了“三个臭皮匠赛过诸葛亮”。
题目为:
22014%7 (没记清原题是2014次方还是其他,反正是高次,这里就取2014)
方案一:
当时第一个反应就是分解。
1, 22014 % 7 = (28)251 * 26 % 7 ;
2, 28 % 7 = 4;
3, 26 % 7 = 2;
即 等式1 = 4251 * 2;
接下去将 4251转化为 低次幂,分别求余,直到最后得出结果。(这里是为了阐述思路,在考试的时候,为了省时间,可能第一次就分解成比较大的数字,这样可以较快的降低幂)
方案二:
将原数转化为二进制。
(22014)10 = (100000000.....)2 —— (2014个0)
(7)10 = (111)2
然后进行除法:
前面的1000%111等于1. 余数1再与后面的三个0结合,又可余1.
不断执行以上步骤,可以看出规律来。又
2014%3 = 1 即最后一次结合会余下1和最后一个0.
即(10)2 = (2 )10
(别看我用语言描述的这么麻烦,其实就是普通的除法,要是编辑器可以画图就好了……)
方案三:
该方案来自评论。就是直接找规律。
高次幂对某个数求余的结果随着幂的增加而呈现出有限循环。
该方法最迅速。
现在想想,既然题目中底数是2,刚好就是为二进制设计的。看来出题的人应该更希望我们采用方案二。