首页 > 代码库 > 快速幂
快速幂
Raising Modulo Numbers http://poj.org/problem?id=1995
快速幂取模
1 #include<cstdio> 2 typedef __int64 LL; 3 LL quickpow(LL a,LL b,LL c){//快速幂求(a^b)%c 4 LL ret=1%c; 5 for(;b;a=a*a%c,b>>=1){ 6 if(b&1){ 7 ret=ret*a%c; 8 } 9 }10 return ret;11 }12 int main(){13 int t,n;14 LL mod,a,b;15 while(~scanf("%d",&t)){16 while(t--){17 scanf("%I64d%d",&mod,&n);18 LL sum=0;19 while(n--){20 scanf("%I64d%I64d",&a,&b);21 sum+=quickpow(a,b,mod);22 sum%=mod;23 }24 printf("%I64d\n",sum);25 }26 }27 }
Turn the pokers http://acm.hdu.edu.cn/showproblem.php?pid=4869
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 typedef __int64 LL; 5 const int M=100010; 6 const int mod=1000000009; 7 LL quickpow(LL a,LL b,LL c){//快速幂求(a^b)%c 8 LL ret=1%c; 9 for(;b;a=a*a%c,b>>=1){10 if(b&1){11 ret=ret*a%c;12 }13 }14 return ret;15 }16 LL C[M];17 LL INV[M];18 int main() {19 for(int i=1; i<M; i++) {20 INV[i]=quickpow(i,mod-2,mod);21 }22 int n,m,a;23 while(~scanf("%d%d",&n,&m)) {24 C[0]=1;25 for(int i=1;i<=m;i++){26 C[i]=C[i-1]*(m-i+1)%mod*INV[i]%mod;27 }28 int L=0,R=0,nl,nr,tmp;29 for(int i=0;i<n;i++){30 scanf("%d",&a);31 tmp=min(m-L,a);32 nr=L+tmp-(a-tmp);33 tmp=min(R,a);34 nl=R-tmp+(a-tmp);35 if(nl>nr) swap(nl,nr);36 if(L<=a&&a<=R){37 if(L%2==a%2){38 nl=0;39 }40 else{41 nl=min(nl,1);42 }43 }44 if((m-R)<=a&&a<=(m-L)){45 if((m-L)%2==a%2){46 nr=m;47 }48 else{49 nr=max(nr,m-1);50 }51 }52 if(L>=a) nl=min(nl,L-a);53 if(m-R>=a) nr=max(nr,R+a);54 L=nl;55 R=nr;56 }57 int ans=0;58 for(int i=L;i<=R;i+=2){59 ans+=C[i];60 ans%=mod;61 }62 printf("%d\n",ans);63 }64 return 0;65 }
end
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。