乘法逆元(updating)

引子:

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

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

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

比如:

ab modp=ab1

ax=1(modb)a,b互质,则称xb的逆元,记作b1

求法1:费马小定理

根据费马小定理:若ap互质,且p为质数,则有ap1=1(modp)

我们选取一个合法的p,则x=ap2(modp)

故可用快速幂处理。

复制代码
#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,jinv[ij]=(inv[i]inv[j])modp,故可以利用这个性质,把它当积性函数来筛出来,这样就可以优化时间。

posted @   BeyondLimits  阅读(317)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示