【快速幂取模】【AOJ-569】乘的更快
2014-02-20 17:48
246 查看
Description
上初中的时候我们就学会了幂乘运算,可是我们却不知道对于高阶的幂乘,出结果的方法比较慢,那么你有什么更好的方法吗?
Input
第1行,一个整数N(1<=N<=1000),表示要计算的数据组数
第2-N+1行,每行两个整数,第1个是x(1<=x<=100),表示底数,第2个是y(0<=y<=10000000),表示指数。
Output
对于每一组输入的数据给出幂乘的结果x^y(x的y次方),由于结果可能非常大,要求对99991取余。
Sample Input
Sample Output
上初中的时候我们就学会了幂乘运算,可是我们却不知道对于高阶的幂乘,出结果的方法比较慢,那么你有什么更好的方法吗?
Input
第1行,一个整数N(1<=N<=1000),表示要计算的数据组数
第2-N+1行,每行两个整数,第1个是x(1<=x<=100),表示底数,第2个是y(0<=y<=10000000),表示指数。
Output
对于每一组输入的数据给出幂乘的结果x^y(x的y次方),由于结果可能非常大,要求对99991取余。
Sample Input
Original | Transformed |
3 2 3 5 10 3 0
3[EOL] 2[SP]3[EOL] 5[SP]10[EOL] 3[SP]0[EOL] [EOF]
Sample Output
Original | Transformed |
8 66498 1
8[EOL] 66498[EOL] 1[EOL] [EOF]
/************************************************************************************************************** 思路:快速幂取模 注意:要把int类型的x转化为long long 或__int64 **************************************************************************************************************/ #include <cstdio> int pow_mod(int x, int y); int main() { freopen("data.in", "r", stdin); int n; scanf("%d", &n); while(n--) { int x, y; scanf("%d %d", &x, &y); printf("%d\n", pow_mod(x, y)); } return 0; } int pow_mod(int x, int y) { x = (__int64)x; __int64 ans = 1 , base = x; if(!y) return 1; while(y) { if(y & 1) ans = ans * x % 99991; x = x * x % 99991; y >>= 1; } return (int)ans; }
相关文章推荐
- 换晶振导致stm32串口数据飞码的解决办法
- 取石子
- POSIX 线程详解,第 2部分
- Last_Errno: 1062,Last_Error: Error Duplicate entry
- 关于mongodb查询数据,数值类型查找不到数据的问题
- eclipse代码提示配置方法
- 决明子
- .bash_profile和.bashrc的什么区别
- 派生类的构造函数的初始化列表问题
- Netty文件传输,使用HttpChunk
- #趣米杯#码农天气--码农自己的天气APP(五)
- C# 通过 BarcodeLib 生成条形码
- linux笔记2.20
- 回文
- 新年到了,发个百度与EMC详细面试经历,为后人铺路
- 计算机专业就业现状及指导
- java.sql.SQLException: JZ00L
- 【原创】关于class.forname
- Android开发规范
- aid列表