zoukankan      html  css  js  c++  java
  • 线性求逆元推导

    本篇介绍线性求逆元的推导过程


    ·对于一个质数(P),我们需要求出(1-N)(mod P)意义下的逆元,如何使用线性的方法求其逆元呢?

    ·首先,我们设(t=P/i,k=P\%i);

    ·对于(i*t+k≡0 pmod{P}),我们可以做出如下推导:

    ·等式两边同时除以(i*k),我们可以得到新式子(frac{t}{k}+frac{1}{i}≡0 pmod{P});

    ·从而得到:(frac{P}{i}*inv[P\%i]+inv[i]≡0 pmod{P});

    ·最后得到(inv[i]=(-frac{P}{i}+P)*inv[P\%i]%P);

    (code:)

    #include<stdio.h>
    #include<algorithm>
    #define ll long long
    using namespace std;
    
    const int maxn=(1e7*2)+2;
    ll n,p,inv[maxn];
    inline ll add(ll a,ll b){return a+b<p?a+b:a+b-p;}
    inline ll mul(ll a,ll b){return a*b<p?a*b:a*b%p;}
    
    int main()
    {
    	scanf("%lld%lld",&n,&p);inv[1]=1;
    	for(int i=2;i<=n;i++) inv[i]=mul(add(-p/i,p),inv[p%i]);
    }
    
    
  • 相关阅读:
    Linux运维相关命令
    Linux常用命令合集
    python爬虫
    Linux常见知识点
    mysql linux上安装使用
    非托管代码方面的问题
    有趣知识
    C# 模式匹配
    C# 泛型约束
    怎么查看自己电脑的IP地址?
  • 原文地址:https://www.cnblogs.com/KatouKatou/p/9821642.html
Copyright © 2011-2022 走看看