求乘方取模(快速幂+慢速乘法模板)
2016-08-23 20:21
405 查看
求乘方取模
题目描述:给定非负整数A、B、M,求(A ^ B) mod M。
输入描述 Input Description
包含多组输入,输入处理到EOF。
每组输入仅一行,三个用空格隔开的非负整数A、B、M。
输出描述:
对于每组输入,输出一行,一个非负整数,即(A ^ B) mod M。
样例输入:
2 3 100006
32 71 83
900 800 777
样例输出:
8
5
219
数据范围及提示:
0 <= A, B < 8 * 10^18。
0 < M < 8 * 10^18。
保证A和B不同时为0。
#include<iostream> #include<cstdio> using namespace std; unsigned long long a,b,m; unsigned long long quick_mul(unsigned long long a,unsigned long long b,unsigned long long mod)//慢速乘法模板 { unsigned long long ans=0; while(b) { if(b&1) { b--; ans=(ans+a)%mod; } b>>=1; a=(a+a)%mod; } return ans; } unsigned long long quick_mi(unsigned long long a,unsigned long long b,unsigned long long mod)//快速幂模板 { unsigned long long ans=1; while(b) { if(b&1) ans=quick_mul(ans,a,mod); b>>=1; a=quick_mul(a,a,mod); } return ans; } int main() { while(cin>>a>>b>>m)//a^b%m cout<<quick_mi(a,b,m)<<endl; return 0; }
相关文章推荐
- Java静态分派与动态分派
- 线性同余方程及例题 codeforces 710D
- 4000 java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoa
- Android学习笔记--3.Intent的使用
- java虚拟机垃圾回收
- & |运算小记
- C++学习笔记之——map set 与 opencv中的数据结构 如 point 等不兼容
- 关于oracle with as用法
- uvalive 6693 - Flow Game - BFS
- Qt 菜鸟的坑 QAbstractSocket::isValid()
- Android中所有API和对应权限的数据结构构建
- refresh的停车场
- 简单方法实现Android阅读器分页
- Winform部分控件使用
- 线程池 队列生产者消费者模型实现
- ListView中EditText焦点获取
- Jetty调试
- 获取 ViewPager 内部子控件的方法
- 同步器
- [Java ]学习技巧积累篇