提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、快速幂代码
long long fastpower(long long base,long long power){
long long int ans=1;
while(power>0){
if(power&1)
ans=(ans*base)%p;
power>>=1;
base=(base*base)%p;
}
return ans;
}
二、例题及代码
1.P1226 【模板】快速幂
代码如下(示例):
#include <bits/stdc++.h>
using namespace std;
long long int a,b,p;
long long fastpower(long long base,long long power){
long long int ans=1;
while(power>0){
if(power&1)
ans=(ans*base)%p;
power>>=1;
base=(base*base)%p;
}
return ans;
}
int main(){
cin>>a>>b>>p;
printf("%ld^%ld mod %ld=%ld",a,b,p,fastpower(a,b));
return 0;
}
2.P3197 [HNOI2008] 越狱
思路:
首先,第一种思路肯定是搞一个公式可以直接算出有相邻两个人信仰相同的情况数,but。。。没有万能公式啊!!!
然后换一种思路。
我们可以倒过来想,我们只需要算出不越狱的情况,再用总情况减掉就行了!!!
所以。。。第一个人有m种选择,第二个人为了不与第一个人不重复,只有m-1个选择,第三个人为了不与第二个人重复,也只有m-1个选择。。。那么,最后的公式。。。

代码如下(示例):
#include <bits/stdc++.h>
using namespace std;
const int p=100003;
long long int a,b;
long long fastpower(long long base,long long power){
long long int ans=1;
while(power>0){
if(power&1)
ans=(ans*base)%p;
power>>=1;
base=(base*base)%p;
}
return ans;
}
long long int sum,s;
int main(){
cin>>a>>b;
sum=fastpower(a,b);
s=(a*fastpower(a-1,b-1))%p;
printf("%d\n",(sum+p-s)%p);
return 0;
}