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的求解)的主要内容,如果未能解决你的问题,请参考以下文章

51Nod 1046 A^B Mod C Label:快速幂

计算幂 51Nod 1046 A^B Mod C

题解51 nod 1046

1046 A^B Mod C(快速幂取模)

51NOD-01046 A^B Mod C

51 Nod 1013 3的幂的和 矩阵链乘法||逆元+快速幂