逆元的求法

Posted kamimxr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆元的求法相关的知识,希望对你有一定的参考价值。

1.扩展欧几里得:

   

void Exgcd(ll a, ll b, ll &x, ll &y) 
    if (!b) x = 1, y = 0;
    else Exgcd(b, a % b, y, x), y -= a / b * x;

int main() 
    ll x, y;
    Exgcd (a, p, x, y);
    x = (x % p + p) % p;
    printf ("%d\n", x); //x是a在mod p下的逆元

 

2.费马小定理+快速幂:

ll fpm(ll x, ll power, ll mod) 
    x %= mod;
    ll ans = 1;
    for (; power; power >>= 1, (x *= x) %= mod)
        if(power & 1) (ans *= x) %= mod;
    return ans;

int main() 
    ll x = fpm(a, p - 2, p); //x为a在mod p意义下的逆元

 3.线性递推方程:

ki+r0(modp)

k(r的逆元)+(l的逆元)0(modp)

(l的逆元)k(r的逆元)(modp)

(l的逆元)≡−⌊p/i?⌋∗((p%i)的逆元)(modp)

 

#include <bits/stdc++.h>
#define p 1000000007
using namespace std;
long long inv[100010];
int main()

	int n;
	cin>>n;
	inv[1]=1;
	for(int i=2;i<=n;i++)
		 inv[i]=(p-p/i)*inv[p%i]%p;
	
	for(int i=1;i<=n;i++)
		cout<<inv[i]<<" ";
	

 

另外,对于阶乘:inv[i+1]*(i+1)=inv[i]

 

以上是关于逆元的求法的主要内容,如果未能解决你的问题,请参考以下文章

乘法逆元简单说说乘法逆元的求法

逆元的求法

总结四种逆元的求法

乘法逆元的求法(5种)

HDU 1576 -- A/B (总结乘法逆元的几种求法)

7的逆元怎么算