51Nod-1046 A^B Mod C (快速幂,了解快速幂及对 A^B Mod C的求解)
Posted bendandedaima
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51Nod-1046 A^B Mod C (快速幂,了解快速幂及对 A^B Mod C的求解)相关的知识,希望对你有一定的参考价值。
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
给出3个正整数A B C,求A^B Mod C。
例如,3 5 8,3^5 Mod 8 = 3。
Input
3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9)
Output
输出计算结果
Input示例
3 5 8
Output示例
3
下面是a^b快速幂的函数。
1 int poww(int a,int b){ 2 int ans=1,base=a; 3 while(b!=0){ 4 if(b&1!=0) 5 ans*=base; 6 base*=base; 7 b>>=1; 8 } 9 return ans; 10 }
下面是关于A^B Mod C的类型。
1:A=A*A的地方要取模
2:还有结果的地方都要取模
1 #include<stdio.h> 2 long long poww(long long a,long long b,long long c) 3 { 4 long long ans=1,base=a; 5 while (b!=0) 6 { 7 if(b&1!=0) 8 { 9 ans*=base; 10 ans=ans%c;//这里取模←←←←←←←←←←←← 11 } 12 base*=base; 13 base=base%c;//这里取模←←←←←←←←←←←← 14 b>>=1; 15 } 16 return ans%c;//这里取模←←←←←←←←←←←← 17 } 18 int main() 19 { 20 long long A,B,C; 21 scanf("%lld%lld%lld",&A,&B,&C); 22 if(B%2==0) 23 { 24 A=(A*A)%C;//这里取模←←←←←←←←←←←← 25 printf("%lld ",poww(A,B/2,C)%C); 26 } 27 else 28 { 29 long long Q=A; 30 A=(A*A)%C;//这里取模←←←←←←←←←←←← 31 printf("%lld ",(poww(A,B/2,C)*Q)%C); 32 } 33 return 0; 34 }
以上是关于51Nod-1046 A^B Mod C (快速幂,了解快速幂及对 A^B Mod C的求解)的主要内容,如果未能解决你的问题,请参考以下文章