昨天兄弟问我一个模运算的题,怎么写怎么超时,要么WA,两个菜鸟讨论了半天也没讨论出个所以然来。后天问了别人,感觉这种写法很实用啊,就先存在这里。
题目是SDUST OJ上的,题目如下:
Problem U: 开心的小杰
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 135 Solved: 25
[Submit][Status][Web Board]
Description
小杰这次被某外语专业录取了,他发现班里n个MM,小杰从来没有见过这么多MM,假设小杰的人品值为rp,桃花运指数为m,则小杰最多可以追到(rp^m)%n个MM(^为乘方符号,例如a^b为a的b次方,%为取余符号,例如a%b为a除b的余数)。
Input
有多组输入数据,每组输入数据3个整数rp,m,n(0
Output
每个数据输出一行,一个整数代表小杰最多可以追到多少个MM。
Sample Input
1 1 2
2 4 100
Sample Output
1
16
代码如下
1 #include
2 #include
3 using namespace std;
4
5 int main()
6 {
7 long long rp,m,n;
8 while(cin >> rp >> m >> n)
9 {
10 rp %= n;
11 long long ans = 1;
12 for (int i=0;i1024;i++)
13 {
14 ans = ans * rp % n;
15 }
16 for (int i=0;i<10;i++)//这个10与上面的1024的关系为 2^10 == 1024;换成256与8也能过,这是时间会慢很多;
17 {
18 ans = ans * ans % n;
19 }
20 for (int i=0;i1024;i++)
21 {
22 ans = ans * rp % n;
23 }
24 cout << ans << endl;
25 }
26 }