大家在求一个数的n次方时,可能会用到pow函数(在math.h中),但很容易装不下,可能会循环,也可能会超时。所以一种快速幂的方法就产生了(但也有可能超时,会极大的加快运行速度)
这道题的原理就是假如说我有一个2的10次方,可以把它变成4的五次方,再变成2乘16的二次方,以此类推
所以会区分奇偶数的情况
上代码!!!
#include<stdio.h>
int main (void)
{
//a代表底数,b代表指数,c代表结果
int a=0,b=0,c=1;
scanf("%d%d",&a,&b);
while(b)
{
//奇数情况专门考虑一下,剩下的一样的
if(b%2==1)
{
c=c*a;
}
b/=2;
a=a*a;
}
printf("%d",c);
return 0;
}
其实这种方法是从一个求余数的题中推广出来的方法
看一下吧用到了一个数学中的结论:
各个数乘积的余数等于各个数余数的乘积的余数
(积的取余等于取余的积的取余)
#include<stdio.h>
int main (void)
{
//依次是底数,幂,除数,
int a=0,b=0,c=0,result=1;
scanf("%d%d%d",&a,&b,&c);
a=a%c;
while(b)
{
if(b%2==1)
{
result=result*a%c;
}
b/=2;
a=a*a%c;
}
//这就是最终的余数
printf("%d",result);
return 0;
}