逆元的求法

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.线性递推方程:

k∗i+r≡0(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]

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

时间: 2024-10-11 14:55:24

逆元的求法的相关文章

乘法逆元及求法

在开始之前我们先介绍3个定理: 1.乘法逆元(在维基百科中也叫倒数,当然是 mod p后的,其实就是倒数不是吗?): 如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p的乘法逆元为x. 2.费马小定理(定义来自维基百科): 假如a是一个整数,p是一个质数,那么是p的倍数,可以表示为 如果a不是p的倍数,这个定理也可以写成 3. 扩展欧几里得 (定义来自维基百科): 已知整数a.b,扩展欧几里得算法可以在求得a.b的最大公约数的同时,能找到整数x.y(其中一个很可能

【总结】四种逆元的求法

前言 逆元是一直以来想补的坑了 求逆元 即求 x 满足 a/b % mod =a*x%mod =1%mod 费马小定理 限制:mod为质数 #include<bits/stdc++.h> using namespace std; int b,mod; inline int ksm(int a,int b) { int ret=1; while(b) { if(b&1)ret=(ret*a)%mod; a=(a*a)%mod; b>>=1; } return ret; } i

乘法逆元的求法(5种)

若a*b≡1(mod p) 即a,b互为mod p意义下的逆元 即(x/a)%p应为x*b%p 一.扩展欧几里得求逆元 根据a*b+p*k=1 板子O(logN): 1 #include<bits/stdc++.h> 2 typedef long long ll; 3 ll exgcd(ll a,ll b,ll &x,ll &y) { 4 if(!b) { 5 x=1,y=0; 6 return a; 7 } 8 ll res=exgcd(b,a%b,y,x); 9 y-=a/

乘法逆元

定义:当(a,p)=1时,存在ax≡1(mod p),则x叫作a在模p意义下的乘法逆元. 求法: 1.当p为质数时,由费马小定理,得ap-1≡1(mod p),即(a·ap-2)≡1(mod p),则a在模p意义下的乘法逆元是ap-2,直接用快速幂可求得. 2.当p不为质数时,用扩展欧几里得算法求a的逆元. 代码: 1 int exgcd(int a,int b,int &x, int &y) 2 { 3 int d=a; 4 if(b!=0){ 5 d=exgcd(b,a%b,y,x);

BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的染色方案视为等价的,求等价类计数. 分析 给出置换求等价类计数,用Burnside引理:等价类计数=(每一个置换不动点的和)/置换数.(不知道的建议去看白书) 其中不动点是指一个染色方案经过置换以后染色与之前完全相同. 1.求不动点个数. 不动点的话同一个循环内的每一个点的颜色必须相同(否则不同颜色

关于乘法逆元的世界

引子 经过几天的努力,终于将逆元这个大难题给攻克了--心情激动的一时无法平复.下面就简单介绍一下关于逆元的知识,来记录自己的成果,也希望能够帮助到别人.某些地方可能理解的不够深入,还请多多包涵. 定义 逆元,又称数论倒数,如果a*x≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p的乘法逆元为x.(来自维基百科) 怎么说呢,逆元其实就是一个相当于倒数的东西,只不过是多模了一个p而已.要说它有什么用,那么请回忆一下倒数有什么用吧.没错,在上小学时,老师就教导过我们,除以一个

浅谈模质数意义下的乘法逆元

原文链接(更好的阅读体验) 参考文章www.luogu.org/blog/zyxxs/post-xiao-yi-jiang-tan-qian-tan-sheng-fa-ni-yuan 什么是乘法逆元 若整数\(b,m\)互质,并且\(b|a\),若存在一个整数\(x\),使得\(a / b \equiv a \ast x (mod \text{ } m)\),称\(x\)为 \(b\)的模\(m\)乘法逆元. 乘法逆元的用处 有时候,我们需要求\(a/b \text{ } mod \text{

数论 HDOJ 5407 CRB and Candies

题目传送门 题意:求LCM (C(N,0),C(N,1),...,C(N,N)),LCM是最小公倍数的意思,C函数是组合数. 分析:先上出题人的解题报告 好吧,数论一点都不懂,只明白f (n + 1)意思是前n+1个数的最小公倍数,求法解释参考HDOJ 1019,2028 这个结论暂时不知道怎么推出来的,那么就是剩下1/(n+1) 逆元的求法了 代码: /************************************************ * Author :Running_Time

Steps

给出N-1对括号,求出N-1对括号的正确匹配方案数(对1000000007取模)的结果. 卡特兰数 逆元: 求n个逆元的O(n)的算法 乘法逆元及求法