高次幂求余的思考

题记:                                                   

  昨天参加了阿里巴巴的笔试,回来之后和室友分享有趣的题目。聊了之后才觉得,就是一道简单的题目也可以有多种思考,同时也验证了“三个臭皮匠赛过诸葛亮”。

 

                     

题目为:

  22014%7    (没记清原题是2014次方还是其他,反正是高次,这里就取2014)

方案一:

  当时第一个反应就是分解。

  1,  22014 % 7 = (28251 * 26 % 7 ;

  2,  2% 7 = 4;

  3,  2% 7 = 2;

  即 等式1 = 4251 * 2;

  接下去将 4251转化为 低次幂,分别求余,直到最后得出结果。(这里是为了阐述思路,在考试的时候,为了省时间,可能第一次就分解成比较大的数字,这样可以较快的降低幂)

 

方案二:

  将原数转化为二进制。

  (2201410 = (100000000.....)2                     —— (2014个0)

  (7)10 = (111)2

  然后进行除法:

  前面的1000%111等于1.  余数1再与后面的三个0结合,又可余1.

  不断执行以上步骤,可以看出规律来。又

  2014%3 = 1 即最后一次结合会余下1和最后一个0.

  即(10)2 = (2 )10

 

  (别看我用语言描述的这么麻烦,其实就是普通的除法,要是编辑器可以画图就好了……)

方案三:

  该方案来自评论。就是直接找规律。

  高次幂对某个数求余的结果随着幂的增加而呈现出有限循环。

  该方法最迅速。

 

                     

现在想想,既然题目中底数是2,刚好就是为二进制设计的。看来出题的人应该更希望我们采用方案二。

posted @ 2014-03-30 23:16  超酷辉  阅读(1730)  评论(2编辑  收藏  举报