减小模运算时间复杂度的小技巧
来源:互联网 发布:大数据分析软件 编辑:程序博客网 时间:2024/05/16 01:20
昨天兄弟问我一个模运算的题,怎么写怎么超时,要么WA,两个菜鸟讨论了半天也没讨论出个所以然来。后天问了别人,感觉这种写法很实用啊,就先存在这里。
题目是SDUST OJ上的,题目如下:
Problem U: 开心的小杰
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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<n<2^31,0<rp<2^31,0<m<2^31).
Output
每个数据输出一行,一个整数代表小杰最多可以追到多少个MM。
Sample Input
1 1 22 4 100
Sample Output
116
代码如下
1 #include <iostream> 2 #include <cstdio> 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;i<m/1024;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;i<m%1024;i++)21 {22 ans = ans * rp % n;23 }24 cout << ans << endl;25 }26 }
- 减小模运算时间复杂度的小技巧
- 使用“哨兵”减小时间复杂度
- j2me中的小技巧-----如何减小程序的大小
- CodeForces 253D Table with Letters - 2 减小复杂度的技巧+交替枚举
- url去重算法降低时间复杂度(python小技巧)
- 设计时间复杂度小的算法
- 位运算的小技巧
- 关于程序的运算时间复杂度的一点思考
- 代数运算3(算法的时间复杂度分析)
- 时间管理的小技巧
- 时间复杂度(小总结)
- 位运算的小技巧s
- 减小编译时间的两种做法
- 模运算的技巧
- 位运算小技巧。
- 【数据结构】线性结构:存储&运算&时间复杂度
- 时间复杂度的计算
- 时间复杂度的计算
- HDU 1874 畅通工程续
- POJ 3259 Wormholes
- POJ 3169 Layout
- 最长公共子序列
- 位运算
- 减小模运算时间复杂度的小技巧
- SDUT 2408 Pick apples
- HDU 1166 敌兵布阵
- HDU1754 I Hate It 点修改 区间查询 模板题
- HDU 1264 Counting Squares
- 面积并问题 HDU 1542 Atlantis
- SDUT—2057 模拟题
- Android杂谈---获取手机屏幕大小
- SDUT1482——二元多项式