关于逆元的学习笔记(尚未完成)

本文介绍了在模意义下求解整数逆元的三种方法:利用费马小定理进行快速幂运算、扩展欧几里得算法及线性求逆元方法,并提供了具体的数学推导与代码实现。

QwQ嘤嘤嘤 只是为了整理一下自己的求逆元的方法

假设我们要求a在模p意义下的逆元,我们会有以下几种做法:

1>如果p是质数的话

ap11(modp)ap−1≡1(modp)

那么我们稍加变形,就能得出

ap21a(modp)ap−2≡1a(modp)

那么ap2ap−2就是逆元了
可以直接用快速幂求解

ll qsm(ll ii,ll j)
{
  ll ans=1;
  while (j)
  {
     if (j&1) ans=ans*i%mod;
     i=i*i%mod;
     j>>=1;
  }
  return ans;
}

int main()
{
    inv = qsm(a,p-2)
}

2.扩展欧几里得
求逆元,实际上就是求这个式子的x

ax1(modp)ax≡1(modp)

然后解一下就好

void exgcd(ll &x,ll &y,ll a,ll b)
{
  if (b==0)
  {
    x=1;
    y=0;
    return;
  }
  exgcd(x,y,b,a%b);
  ll tmp =x;
  x=y;
  y=tmp-a/b*y;
}

3.线性求逆元

能够求出1n1−n所有数在modmod p意义下的逆元

首先我们对于一个要求的数ii来说

p=ki+r
那么

ki+r0(modp)k∗i+r≡0(modp)

等式两边同时乘i1r1i−1∗r−1

kr1+i10(modp)k∗r−1+i−1≡0(modp)

i1kr1(modp)i−1≡−k∗r−1(modp)

又因为k=pir=p % ik=⌊pi⌋,r=p % i

所以

i1pi(pmod i)1(modp)i−1≡−⌊pi⌋∗(pmod i)−1(modp)
inv[1]=1;
  for (int i=2;i<=n;i++)
  {
     inv[i]=-(p/i)*inv[p%i];
     inv[i]=(inv[i]%p+p)%p;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值