快速幂算法#洛谷P1226
最近学习了分治算法的基本思想。所谓分治算法,就是将大问题分成若干个容易解决的子问题,子问题继续分,直到该问题可以一步求解。
分治算法有四点特征:
1、问题缩小到一定的规模就可以容易地解决。
2、该问题可以分为若干个规模较小的相同问题,即该问题具有最优子结构。
3、利用该问题分解出来的子问题的解可以合并成原问题的解。
(如果不具有这条特征而具有前两条特征,可以考虑采用贪心或者动态规划)
4、各子问题之间彼此独立。
————————————手动分割线——————————————————
接下来我们来看这道快速幂。
题目描述
给你三个整数 b,p,k,求 bp mod k。
输入格式
一行三个整数 b,p,k
输出格式
输出 bp mod k=s
s 为运算结果
输入输出样例
输入 #1
2 10 9
输出 #1
2^10 mod 9=7
说明/提示
【样例解释】
2^10=1024,1024 mod 9 = 7。
【数据范围】
对于 100% 的数据,0≤b,p,k < 231 。
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll quickpow(ll b,ll p,ll k){
ll ans=1;
if(p==0)return 1%k;
while(p){
if(p%2)
ans=(ans*b)%k;
b=(b*b)%k;
p/=2;
}
return ans;
}
int main(){
ll b,p,k;//b是底数 p是幂数 k是取模数
scanf("%lld%lld%lld",&b,&p,&k);
printf("%lld^%lld mod %lld=%lld\n",b,p,k,quickpow(b,p,k));
}
PS:这篇博客是给我这个蒟蒻自学复习用的