码迷,mamicode.com
首页 > 其他好文 > 详细

快速幂的求法之总结.

时间:2014-11-03 20:51:42      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   sp   数据   div   log   代码   bs   

刚刚接触到ACM 遇到指数实在是有心无力,在网上查了一下.发现了快速幂.现总结如下:

 

我称为quick mi.

假设3个数字 a,b,c;

我要求的是 (a^b)modc=?

显然,如果a b 都过大的话,数据肯定会溢出的. 所以

用quick mi肯定简单许多,时间缩短了,而且也不容易溢出.

首先想到一个公式:(a*b)modc = (amodc)*(bmodc)modc;

这个公式怎么来的,证明过程如下:

amodc=d;

bmodc=e;

a=tc+d;

b=kc+e;

所以 (a*b)modc=(...)(...)modc=(tkc^2+(te+ak)c+de)modc=demodc=(amodc)(bmodc)modc;

依上公式可得:

假设b为偶数 即得 ((a^2)^(b/2))mod c 然后设a=a^2 得 (a^(b/2))modc 又令 a=a^2;得 (m^(b/4))modc;

但是 在此过程中,很有可能会使得b的值为奇数,那么,只要在加一句判断 然后 s=(s*a)%c;s为之前求得的余数。//即多乘一项即可!

 

代码如下:

 1 int quickmi(int a,int b,int c)
 2 {   int s=1;
 3     a=a%c;
 4     while(b>0)
 5     {
 6         if(b%2==1)//判断一下b是否为奇数
 7           s=(s*a)%c;//如果是奇数,则多乘一项
 8           b=b/2;
 9           a=(a*a)%c;
10     }
11     return s;
12 }

 

快速幂的求法之总结.

标签:style   blog   color   sp   数据   div   log   代码   bs   

原文地址:http://www.cnblogs.com/ikids/p/4072042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!