乘法逆元(updating)

博客介绍了加法、减法、乘法模运算满足交换律和结合律,而除法取模因分数会有意外情况,可将除法转化为乘法形式。还阐述了逆元的定义,介绍了用费马小定理求逆元的方法,即利用快速幂处理,并且提到可利用积性函数性质优化求逆元的时间。

引子:

对于加法、减法、乘法,进行模运算,都满足交换律和结合律。

对于除法,当创造出了分数,取模则会出现一些意外情况。

由于分数,我们可以把除法转化成乘法的形式。

比如:

$\frac{a}{b}$ $mod p = a*b^{-1}%p$

若$a*x = 1( mod b)$,$a,b$互质,则称$x$为$b$的逆元,记作$b^{-1}$。

求法1:费马小定理

根据费马小定理:若$a$,$p$互质,且$p$为质数,则有$a^{p-1}=1(mod p)$。

我们选取一个合法的$p$,则$x = a^{p-2}(mod p)$。

故可用快速幂处理。

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll n,p;
ll qpow(ll a,ll b){
    ll ans=1;
    while(b){
        if(b&1) ans=(ll)(ans*a)%p;
        a=(ll)(a*a)%p;
        b>>=1;
    }
    return ans%p;
}
int main(){
    scanf("%lld %lld",&n,&p);
    for(int i=1;i<=n;i++)
        printf("%lld\n",qpow(i,p-2)%p);
    return 0;
}

 优化:设$i$的阶乘为$inv[i]$。经过观察,我们发现对于任意$i,j$,$inv[i*j]=(inv[i]*inv[j])\mod p$,故可以利用这个性质,把它当积性函数来筛出来,这样就可以优化时间。

转载于:https://www.cnblogs.com/BeyondLimits/p/11166126.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值