2013年暑假队内选拔赛题解2
2013-07-08 16:24
183 查看
D 人见人爱A^BmodC
Problem Description
计算A的B次幂对c取模(A^BmodC)并且1<=A,B,C<=32768.
输入三个整数A,B,C,输入文件每一行依次三个整数a,b,c用空格隔开
每行输出一个运算结果
Sample:
Input:
3 4 5
10 10 100
45 67 89
1 1 1
Output:
1
0
45
0
解题思路:
本题为幂模运算,将其转化为乘模运算,实质为二分法。相关算法为蒙哥马利幂模运算,如要了解可以点击这里http://baike.baidu.com/view/8426503.htm
说明:a^b%c在以后会经常用到,此类运算出现的很频繁,需要熟练掌握。题中二分的思想也很基础。
Code:
本题答案中有一些小常识,值得借鉴,在这里强调一下,先把代码贴出来:
Problem Description
计算A的B次幂对c取模(A^BmodC)并且1<=A,B,C<=32768.
输入三个整数A,B,C,输入文件每一行依次三个整数a,b,c用空格隔开
每行输出一个运算结果
Sample:
Input:
3 4 5
10 10 100
45 67 89
1 1 1
Output:
1
0
45
0
解题思路:
本题为幂模运算,将其转化为乘模运算,实质为二分法。相关算法为蒙哥马利幂模运算,如要了解可以点击这里http://baike.baidu.com/view/8426503.htm
说明:a^b%c在以后会经常用到,此类运算出现的很频繁,需要熟练掌握。题中二分的思想也很基础。
Code:
#include<iostream> using namespace std; int main() { int a,b,c; while(cin>>a>>b>>c) { int temp=1; while(b) { if(b%2==0) { a=a*a%c; b/=2; } else { temp=a*temp%c; b-=1; } } cout<<temp<<endl; } return 0; }
本题答案中有一些小常识,值得借鉴,在这里强调一下,先把代码贴出来:
while(b) { if(b&1)//二进制与运算,可以判断奇偶;当结果不为0时(奇数为1,偶数为0),条件成立;即当b为奇数时if成立;if(n)等价于if(n!=0) temp=(temp*a)%c; b>>=1;//就是相当于b = b >> 1;>>的意思是二进制算术右移 a=(a*a)%c; }
相关文章推荐
- 2013年暑假队内选拔赛题解1
- 2013年暑假队内选拔赛题解3
- 2013年暑假队内选拔赛题解4
- 2012年佛山市GDOI选拔赛题 加边
- 2013年暑假训练题号
- CSUST选拔赛题解之-Problem A: 灾区重建
- 2628 2012年佛山市GDOI选拔赛题 循环小数(4.1)
- CSUST选拔赛题解之-Problem B: 洗衣
- (未完成)电子设计省赛--2013年国赛题
- 2013年暑假实习第一周总结
- SSL 2627——2012年佛山市GDOI选拔赛题 红蓝牌
- 2013年暑假集训
- CSUST选拔赛题解之-Problem C: 先有durong后有天
- JXNU暑期选拔赛题解
- CSUST选拔赛题解之-Problem E: 杜荣NB
- 郑轻新生校赛和中工选拔赛题解
- 软件大赛校内选拔赛题:蛇形填数
- 树状数组(暑假选拔)
- 2013 whu暑假集训选拔#1
- 2013年暑假小结