快速幂
定义:
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
【提示】
数据范围与提示:
对于全部数据,1≤a,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; }