博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
乘法逆元
阅读量:3967 次
发布时间:2019-05-24

本文共 1696 字,大约阅读时间需要 5 分钟。

原始链接:[](https://blog.csdn.net/weixin_43872728/article/details/99687168?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159788598219725211921229%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159788598219725211921229&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-4-99687168.first_rank_ecpm_v3_pc_rank_v2&utm_term=%E4%B9%98%E6%B3%95%E9%80%86%E5%85%83&spm=1018.2118.3001.4187)

逆元:在数论中称倒数为逆元。

求余:

(a + b) % p = (a%p + b%p) %p (对)

(a - b) % p = (a%p - b%p) %p (对)

(a * b) % p = (a%p * b%p) %p (对)

(a / b) % p = (a%p / b%p) %p (错)

ps: (100/50)%20 = 2 ≠ (100%20) / (50%20) %20 = 0

对于一些题目,我们必须在中间过程中进行求余,否则数字太大,电脑存不下,那如果这个算式中出现除法,我们是不是对这个算式就无法计算了呢?

如果

a*x = 1

那么x是a的倒数,x = 1/a

但是a如果不是1,那么x就是小数

那数论中,大部分情况都有求余,所以现在问题变了

a*x = 1 (mod p)

那么x一定等于1/a吗

由前面我们推得的求余的概念,算式中出现了除法,那么x不一定等于1/a。

所以说数论中的逆元与常说的倒数之间的差别就在于逆元多了一个求余条件,所以x叫做a关于p的逆元。

总结起来就是

设c是b的逆元,则有b*c≡1(mod m);

推论:(a/b)mod m = (a/b)*1mod m = (a/b)bc mod

m=a*c(mod m); 即a/b的模等于a * (b的逆元)的模;

求 (A / B) %p ;在B的值非常大的情况下,B作为除数,极有可能会爆精度;除数不能太大;所以我们可以把他转化为乘法来解决;

(a/b)mod m = (a/b)*1mod m = (a/b)bc mod
m=ac(mod m);
即a/b的模等于a * (b的逆元)的模;

必不可少的板子:

扩展欧几里得算法求逆元:

long long extend_gcd(long long a,long long b,long long &x,long long &y) {
if(a==0&&b==0) return -1ll; if(b==0) {
x=1ll; y=0ll; return a; } long long d=extend_gcd(b,a%b,y,x); y-=a/b*x; return d;}long long mod_reverse(long long a,long long n) {
long long x,y,d=extend_gcd(a,n,x,y); if(d==1) {
if(x%n<=0)return x%n+n; else return x%n; } else return -1ll;}

费马小定理+快速幂求逆元

long long PowMod(long long a,int b) {
long long ret=1; while(b) {
if(b&1)ret=ret*a%Mod; a=a*a%Mod; b>>=1; } return ret;}
你可能感兴趣的文章
设备标识及驱动程序所支持的设备(…
查看>>
EXPORT_SYMBOL()
查看>>
EXPORT_SYMBOL()
查看>>
在fedora9中编译linux设备驱动程序…
查看>>
在fedora9中编译linux设备驱动程序…
查看>>
LDDR3中scull编译问题
查看>>
LDDR3中scull编译问题
查看>>
内核模块转
查看>>
内核模块转
查看>>
ARM中断原理,&nbsp;中断嵌套的误区,中…
查看>>
ARM中断原理,&nbsp;中断嵌套的误区,中…
查看>>
struct&nbsp;device&nbsp;中的dev_id哪里去了…
查看>>
struct&nbsp;device&nbsp;中的dev_id哪里去了…
查看>>
Platform总线
查看>>
Platform总线
查看>>
Linux驱动程序中的platform总线详…
查看>>
Linux驱动程序中的platform总线详…
查看>>
按键驱动--platform设备的例子
查看>>
按键驱动--platform设备的例子
查看>>
mini2440按键驱动及详细解释(转)
查看>>