目录
一、快速幂模板题
给你三个整数,求出 ( a 的 b 次方对 c 取模)
解题示例:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//快速幂关键代码
ll mod_pow(ll x,ll n,ll mod){
ll res =1;
//循环直到n=0
while(n>0){
//如果n是奇数则res*x,n--
if(n&1) res = res * x % mod;
//n变为偶数做数学处理
x = x * x % mod;
//n/2,包含n--,一并处理
n>>=1;
}
return res;
}
int main( )
{
ll a,b,c;
cin>>a>>b>>c;
int res=mod_pow(a,b,c);
cout<<res;
return 0;
}
二、快速幂实质
如果计算 ,按照朴素思路要进行n-1次相乘,而快速幂则是通过减少相乘的次数达到简化效果.
快速幂实质上就是不断通过底数的平方来减小指数的大小。先设 res = 1 (用于记录快速幂的结果),
如果 n 为偶数,可化为 的形式,可见指数减少为原来的一半,得到一个新的 , 如果 n
为奇数,n 无法整除 2 ,于是 res = res * x , n -- . 可证 n 最终必为 1.
//快速幂
ll mod_pow(ll x,ll n,ll mod){
ll res =1;
//循环直到n=0
while(n>0){
//如果n是奇数则res*x,n--
if(n&1) res = res * x % mod;
//n变为偶数做数学处理
x = x * x % mod;
//n/2,包含n--,一并处理
n>>=1;
}
return res;
}
三、取模运算的一些性质
- 加法:
- 乘法:
- 除法:除法不具备类似于加法和除法的性质