码迷,mamicode.com
首页 > 其他好文 > 详细

51Nod-1046 A^B Mod C (快速幂,了解快速幂及对 A^B Mod C的求解)

时间:2018-07-13 17:43:30      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:示例   font   \n   难度   51nod   ack   http   too   item   

基准时间限制: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\n",poww(A,B/2,C)%C);
26     }
27     else
28     {
29         long long Q=A;
30         A=(A*A)%C;//这里取模←←←←←←←←←←←←
31         printf("%lld\n",(poww(A,B/2,C)*Q)%C);
32     }
33     return 0;
34 }

 

 

51Nod-1046 A^B Mod C (快速幂,了解快速幂及对 A^B Mod C的求解)

标签:示例   font   \n   难度   51nod   ack   http   too   item   

原文地址:https://www.cnblogs.com/bendandedaima/p/9305874.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!