接这种类型的道题目的话如果用普通的方法数字稍微大一点就可能会超时了;所以我们计算一个数的多少此方式需要一种快速的方法,来提高效率;
下面我们就介绍一种方法:
如果如果我们能先把他的幂化成二进制;然后通过二进制数来计算,就可以简便很多了;
举个例子:如果我要求2^13:我可以先把13化成二进制(1101);我们可以先计算一次房;然后四次方;然后八次方;
这样2^13次方就出来了;
下面我们就给出知道题目的代码:
#include <iostream>
using namespace std;
int main()
{
int m,n;
while(cin>>n>>m)
{
if(m==0&&n==0)
break;
n=n%1000;
int y=n,x=1;
while(m!=0)
{
if(m&1)//如果二进制对应的位为0则这一位不算;比如说5(101)我们跳过第二位直接算他的一次方和四次方乘起来就为五次方
{
x*=y;
x%=1000;//这里要求后三位数所以取余;
}
y*=y;//y先是一次方(在上面已经被赋值)再是二次方,四次方,八次方,按二进制以此类推;
y=y%1000;
m>>=1;//这里左右移系统自动帮我们化成二进制了;比如说5(101)右移一位就变成了10(二进制);
}
cout<<x<<endl;
}
return 0;
}
(快速幂);