逆元小结

一、若a与n互素,那么可以用扩展欧几里德和欧拉函数求出a对于n的逆元。

ax≡1(mod n),x为a对于n的逆元。

直接用欧几里德求逆元x:

//a与n互素,逆元才有解
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
void exgcd(LL a,LL b,LL &d,LL &x,LL &y)
{
	if(!b)
	{
		d=a;x=1;y=0;
		return ;
	}
	exgcd(b,a%b,d,y,x);
	y-=x*(a/b);
}
LL inv(LL a,LL n)
{
	LL d,x,y;
	exgcd(a,n,d,x,y);
	return d==1?(x+n)%n:-1;
}
int main()
{
	cout<<inv(2,1e9+7)<<'\n';
	return 0;
}

欧拉定理:对于任何两个互质的正整数a,n(n>=2),有a^(φ(n))≡1(mod
n)

那么只要a与n互质,逆元x=a^(φ(n)-1)%n,可以用快速幂求出。

用欧拉定理求解逆元x:

LL inv(LL a,LL euler,LL n)
{
	LL ret=1;
	--euler;
	while(euler)
	{
		if(euler&1)
			ret=ret*a%n;
		euler>>=1;
		a=a*a%n;
	}
	return ret;
}

特殊地,若n是素数的话可以用费马小定理求解。

费马小定理:当n是素数时,a^(n-1)≡1(mod
n)。(费马小定理是欧拉定理的特殊情况)

那么逆元x=a^(n-2)%n。也可以用快速幂直接求出。

二、若a与n不互素,可以用通用的方法求出。(此方法求出的应该不能再叫逆元了)

引入问题:求p=a/b%n。(b与n不互素)

已知:除以一个数b等价与乘以它的乘法逆元inv(b)。

但是此时b与n不互素,因此不能用扩展欧几里德和欧拉定理求解。

可以直接用公式:p=a%(b*n)/b;公式不难证明此方法是在poj1845的讨论区看到的........

另外附上大神的文章:ACdreamer-逆元详解

时间: 2024-08-10 02:03:28

逆元小结的相关文章

【专题】数论

推荐:数论知识总结--史诗大作(这是一个flag) ---下面都是学习的笔记,还没有整理,比较凌乱,有需自取吧.---  [素数测试]Miller-Rabin算法 引用自:数论部分第一节:素数与素性测试 by Matrix67 当p为素数时,有 费马小定理:a^(p-1)=1(%p) Miller-Rabin测试:对于x^2=1(%p),有x=n-1或x=1(x^2-1=(x+1)(x-1)). 探测过程:对于一个底数(可随机)x=d*2^k,从d到x探测时候均符合d*2^k==1&&(d

同余&amp;逆元简单总结

同余&逆元 1. 同余 1. 同余的基本概念及性质 若\(x\)%\(m=a\)即m是 x-a 的一个因子, 则称x与a关于m同余,记作:\[x \equiv a(mod \;m)\] 同余基本性质: ○1. 自反性:\(a \equiv a(mod\;m)\) ○2. 对称性:\(a \equiv b(mod\;m) \rightarrow b \equiv a(mod\;m)\) ○3. 传递性:\(a \equiv b(mod\;m),b \equiv c(mod\;m) \rightar

学习拓展中国剩余定理小结

前言 话说中国剩余定理好早就会了,但是一直木有接触过拓展的. 只知道它是个什么东东. 最近似乎需要它了,稍微学了学,似乎还挺简单的. 小结一下~ 简介 中国剩余定理我们都懂吧? 而拓展则是把它后面的模数变成一个非质数,(当然,各个方程的模数互质). 然后求出最小的x的解. 做法 似乎拓展之后很难用原来的套路来搞了. 怎么办? 我们发现,我们可以利用一些奇怪的推柿子大法来合并柿子. 考虑合并一下两个柿子: \(x \equiv c1 (mod\ m1)\) \(x \equiv c2 (mod\

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

HDU - 5976 Detachment(逆元)

题意:将一个数x拆成a1+a2+a3+……,ai不等于aj,求最大的a1*a2*a3*……. 分析: 1.预处理前缀和前缀积,因为拆成1对乘积没有贡献,所以从2开始拆起. 2.找到一个id,使得2+3+4+……+id - 1(sum[id-1]) < x < 2+3+4+……+id(sum[id).(二分找即可) 则rest = x - sum[id - 1].将rest分配给2+3+4+id-1中的某个数. 3.在保证数字不重复的前提下,分配给的那个数越小越好,证明见4. 因此,应该分配给的

【转载】小结一下linux 2.6内核的四种IO调度算法

在LINUX 2.6中,有四种关于IO的调度算法,下面综合小结一下: 1) NOOP NOOP算法的全写为No Operation.该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作.之所以说“大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求.NOOP假定I/O请求由驱动程序或者设备做了优化或者重排了顺序(就像一个智能控制器完成的工作那样).在有些SAN环境下,这个选择可能是最好选择.Noop 对于 IO

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来

Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2

Android基础入门教程--8.1.2 Android中的13种Drawable小结 Part 2 标签(空格分隔): Android基础入门教程 本节引言: 本节我们继续来学习Android中的Drawable资源,上一节我们学习了: ColorDrawable:NinePatchDrawable: ShapeDrawable:GradientDrawable!这四个Drawable~ 而本节我们继续来学习接下来的五个Drawable,他们分别是: BitmapDrawable:Insert

安卓小结《1》

Activity的生命周期和启动模式的知识点小结: 1.如果Activity切换的时候,新Activity是透明,旧的不会走onStop方法. 2.新的Activity切换的时候,旧Activity  会先执行,onpause,然后才会启动新的activity. 3. Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时 候,onRestoreInstanceState方法会被回调,时序在onSt