快速幂运算(数论知识)
2017-04-27 19:11
246 查看
转自百度,综合了一下。
https://wenku.baidu.com/view/d65f294702768e9951e73883.html typedef long long ll; //注意这里不一定都是long
long 有时 int
也行
ll mod_pow(ll x, ll n, ll mod){
ll res = 1;
while( n > 0 ){
if( n & 1 ) res = res * x % mod; //n&1其实在这里和
n%2表达的是一个意思
x = x * x % mod;
n >>= 1;
//n>>= 1这个和 n/=2表达的是一个意思
}
return res;
}
递归版的
typedef long long ll;
ll mod_pow(ll x, ll n, ll mod){
if( n == 0 ) return 1;
ll res = mod_pow( x * x % mod, n / 2, mod );
if( n & 1 ) res = res * x % mod;
return res;
}
ll ans=1;
a=a%c;
//先简化一下a
while(b>0)
{
If(b%2==1)
//奇数会多乘一项a%c
ans=ans*a%c;
b=b/2;
a=(a*a)%c;
}
return ans;
https://wenku.baidu.com/view/d65f294702768e9951e73883.html typedef long long ll; //注意这里不一定都是long
long 有时 int
也行
ll mod_pow(ll x, ll n, ll mod){
ll res = 1;
while( n > 0 ){
if( n & 1 ) res = res * x % mod; //n&1其实在这里和
n%2表达的是一个意思
x = x * x % mod;
n >>= 1;
//n>>= 1这个和 n/=2表达的是一个意思
}
return res;
}
递归版的
typedef long long ll;
ll mod_pow(ll x, ll n, ll mod){
if( n == 0 ) return 1;
ll res = mod_pow( x * x % mod, n / 2, mod );
if( n & 1 ) res = res * x % mod;
return res;
}
ll ans=1;
a=a%c;
//先简化一下a
while(b>0)
{
If(b%2==1)
//奇数会多乘一项a%c
ans=ans*a%c;
b=b/2;
a=(a*a)%c;
}
return ans;
相关文章推荐
- 模运算相关数论知识
- 一些数论知识
- Codeforces 558C Amr and Chemistry(数论+位运算)
- 数论基础知识测试(送)
- MATLAB 小知识 第二篇 矩阵运算1
- 图像的腐蚀(erode)和膨胀(dilate) 开运算以及闭运算------理论知识及其对应函数
- 快速幂运算
- C进修(4)--有关数据类型运算和变量等基础知识的整理
- 康复计划#2 常用基础数论知识杂烩
- 数论 : 模运算法则(poj 1152)
- [hdu 4959]Poor Akagi 数论(卢卡斯数,二次域运算,等比数列求和)
- 快速幂运算
- 学OI你需要知道的数论知识
- 图文详解C语言位运算基础知识
- javascipt——基础知识——基本数据类型和逻辑运算
- HDU 3117Fibonacci Numbers(求斐波那契前四位与后四位 数论知识+矩阵快速幂)
- 数论的基本知识
- 简单数论知识梳理(省选复习)
- 数论小知识
- 用数论的知识解决模幂运算