快速幂

定义:

1.所谓快速幂,就是快速求以a为底的n次幂(即a^n)的相关操作.

例题:

1616:A 的 B 次方


时间限制: 1000 ms         内存限制: 524288 KB

【题目描述】

  给出三个整数 a,b,m求 a^b mod m 的值。

【输入】

  一行三个整数 a,b,m

【输出】

  一个整数,表示 a^b mod m的值。

【输入样例】

2 100 1007

【输出样例】

169

【提示】

  数据范围与提示:

  对于全部数据,1a,b,m≤10^9

代码部分:

  有的同学到这就笑了出来,这么简单一道题在提高篇里面,就以正常思路写出了代码.

  错误示范(1):

  

 

 problem:写出这种代码的同学一看就没有读题,10的9次方,早就爆int,即使是long long 也超出范围了.

 

 

problem:这个同学挺聪明,学会用<cmath>函数,但同样也是超时,用y总的话:“这位同学,你不要

  以为你改了一个方法(id),改了一个类型(头像)你就可以AC(我就不认识你了!)***,……

这个无论我们用那种方法不是爆表就是超时,这时我们就可以用到"快速幂”.

 AC代码如下:

#include<bits/stdc++.h>
using namespace std;
int qpower(int a,int b,int c){
    if(b==0) return 1;
    int sum=qpower(a,b/2,c);//当b=0是,return 1. 
    sum=1ll*sum*sum%c;
    if(b%2==1) sum=1ll*sum*a%c;//当b是奇数时,多乘一次. 
    return sum;
}
int main(){    
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    printf("%d\n",qpower(a,b,c));
    return 0;
}