码迷,mamicode.com
首页 > 其他好文 > 详细

逆元的求法

时间:2019-10-08 14:45:50      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:class   using   htm   gcd   floor   include   hit   height   space   

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]

 

逆元的求法

标签:class   using   htm   gcd   floor   include   hit   height   space   

原文地址:https://www.cnblogs.com/kamimxr/p/11634882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!