快速幂取模

目录

一、快速幂模板题

二、快速幂实质

三、取模运算的一些性质


一、快速幂模板题

给你三个整数,求出  a^{b}\, mod\, c  ( 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;
}

二、快速幂实质

如果计算 x^{n},按照朴素思路要进行n-1次相乘,而快速幂则是通过减少相乘的次数达到简化效果.

快速幂实质上就是不断通过底数的平方来减小指数的大小。先设  res = 1 (用于记录快速幂的结果),

如果 n 为偶数,可化为  (x^{2})^{n/2} 的形式,可见指数减少为原来的一半,得到一个新的 x^{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;
}

三、取模运算的一些性质

  • 加法: c\, =\, a+b\rightarrow \, \, c\, mod\, n\, =\, (a\, mod\, n\, +b\, mod\, n)\, mod\, n
  • 乘法:c\, = a*b\Rightarrow c\, mod\, n=[(a\, mod\, n)*(b\, mod\, n)]mod\, n
  • 除法:除法不具备类似于加法和除法的性质
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值