首页 > 其他分享 >乘法逆元笔记(蒙哥马利快速幂模)

乘法逆元笔记(蒙哥马利快速幂模)

时间:2024-12-22 16:30:44浏览次数:4  
标签:幂模 int inv 逆元 蒙哥马利 费马 mod

乘法逆元笔记(蒙哥马利快速幂模)

定义

何为逆元?逆元,又称数论倒数。若整数a、b满足同余方程a*b=1(mod n),那么a,b互为模n意义下的逆元。

前置 \(1\) :快速幂

给你三个整数 \(a,b,p\),求 \(a^b \bmod p\)。
如果直接算复杂度太高了,我们优化。
基本的快速幂公式
\(a^b\) 有两种情况,一种是 \(n\) 为偶数,一种是 \(n\) 为奇数。
因为 \(a^{m+n}=a^m+a^n\).
所以当 \(n\) 为偶数时 \(a^n=a^{n/2}*a^{n/2}\) ,而当 \(n\) 为奇数时,则在此基础上再多乘上一个 \(a\) 就可以了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,p;
int qmi(int a,int b,int p){
	int x=1;
	while(b){
		if(b&1) x=x*a%p;
		a=a*a%p;
		b/=2;
	}
	return x;
}
signed main(){
	cin>>a>>b>>p;
	printf("%lld^%lld mod %lld=%lld\n",a,b,p,qmi(a,b,p));
	return 0;
}

前置 \(2\) :费马小定理

先来讲讲费马小定理(知道怎么用就好,不用推的)。
这是费马小定理的原始状态: \(a^p ≡ a (mod\ p)\) ,其中 \(a\) , \(p\) 互质。然后, 原式 => $a^p - a ≡0 (mod\ p) $=> \(a*(a^{p-1} - 1) ≡0 (mod\ p)\)=> \(a^{p-1}-1 ≡0 (mod\ p)\) => \(a^{p-1} ≡1 (mod\ p)\)。
这就是费马小定理的结论,求逆元时常用的。

蒙哥马利快速幂模

这个方法的的局限性很大,只有在 \(p\) 是质数的情况下才可以使用。
设 \(inv(a)\) 是 \(a\) 的逆元 由定义得, \(inv(a) * a ≡1 (mod\ p)\) 。
又有费马小定理 \(a^{p-1} ≡1\) , 易得 \(inv(a) * a ≡a^{p-1} (mod\ p)\) 。
移项,得: \(inv(a) ≡ a^{p-2}\) 。
然后这就是蒙哥马利快速幂模算法的一个前提条件: \(inv(a) ≡ a^{p-2} (mod\ p)\) 。

#include<bits/stdc++.h>
using namespace std;
int a,b,p;
int qmi(int a,int b,int p){
	int x=1;
	while(b){
		if(b&1) x=x*a%p;
		a=a*a%p;
		b>>=1;
	}
	return x;
}
int main(){
	cin>>a>>p;
	cout<<qmi(a,p-2,p)<<endl;
	return 0;
}

OK,完结撒花。

标签:幂模,int,inv,逆元,蒙哥马利,费马,mod
From: https://www.cnblogs.com/yingxilin/p/18622240

相关文章

  • 二元一次方程的整数解、逆元及有理数求模
    前言C++算法与数据结构打开打包代码的方法兼述单元测试一,f(a,b)求ax+by=1的任意解,a>0,b>0,且a、b互质。暴力做法,辗转相减法:如果a>b,则(a-b)和b互质,且都大于0。a<b,类似。a,a==b,a,b互质说明是a和b,都是1。故返回(0,1)。b,a>b则令(a-b)x+by=1的解为(x1,y1),即ax1+b(y1......
  • 202 逆元1
    //202逆元1.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/21/problem/490给一个素数p,求1∼n关于p的逆元。由于输出可能很大,只需要求这些逆元的异或和即可。输入格式一行,两个整数p,n。输出格式一个整数,表示1到n......
  • 乘法逆元小结
    什么是乘法逆元当有$a*x≡1\pmod{p}$时,则\(a\)是模$p$意义下的乘法逆元。费马小定理求逆元费马小定理$a≡a^{p-1}\pmod{p}$所以$a^{p-2}≡1\pmod{p}$求\(a^{p-2}\bmodp\)即可。当且仅当\(p\)为质数且\(a,p\)互质时可用。intksm(intx,......
  • 1.1.4 逆元
    1.1.4逆元主要内容:扩欧求逆元,快速幂求逆元,线性(递归)求逆元,同余模公式(补充),反复平方法求幂(补充)一、逆元首先给出逆元的定义:$$\begin{aligned}假设a\cdotp&\equiv1\quad(mod\quadb)\\且(a,b)&=1\quad即\quada,b互素\\则称p为a的逆元&,记作p=a^{-1}\end{aligned}$......
  • 三种求逆元方法小结
    逆元(自学内容)define:若ax≡1modf,则称a关于1模f的乘法逆元为x。也可表示为ax≡1(modf)。当a与f互素时,a关于模f的乘法逆元有解。如果不互素,通过公式‘a/bmodp=(amod(b·p))/b’来转化计算逆元方式:(条件a,p互质)费马小定理(a\(^{p-1}\)≡1(modp))(a,p互质时,\(a^{fine(p)}......
  • 快速幂模板/洛谷P1226【模板】快速幂
    ​本题是CSP-J组的第四题。题意:给出一个有向图,当前在1号点,初始在时间0,必须在k的倍数的时间出发,且到终点的时间也必须是k的倍数。每条边有一个边权,只有在当前时间≥时才可以通过,且不能在原地不动,即每一个时间点必须走一条边。问从11号点出发到nn号时最早的时刻。(没......
  • P5431 【模板】模意义下的乘法逆元 2
    看到5e6的数据,500ms的时限,\(O(NlogN)\)快速幂直接跑肯定会T掉,那我们就要考虑优化一下式子。我们令\(s=\prod_{1}^{n}{a[i]}\),那我们给第i个式子通分,就为$\frac{k^i*s/a[i]}{s}$\(s/a[i]\)就相当于$\prod^{i-1}_{1}{a[i]}*\prod_{i+1}^{n}{a[i]}$因此我们只需要预......
  • 逆元
    逆元用于求$\frac{a}{b}(mod\p)$的结果第一种方法:拓展欧几里得利用拓欧求解同余方程:\(a*x≡c\(mod\b)\)的\(c=1\)的情况就可以转化成求解\(a*x+b*y=1\)这个方程voidexgcd(lla,llb,ll&x,ll&y)//解ax+by=gcd(a,b)的一组整数解{ if(b==0) { ......
  • 快速计算多个树的逆元
    设\(n\)个数分别为\(a_1\dotsa_n\),令\(s_i\)为\(a_i\)的前缀积,那么对于\(1\lei<n\)有\(s_i^{-1}=s_{i+1}^{-1}*a_{i+1}\),那么\(a_i^{-1}=s_i^{-1}*s_{i-1}\),可以\(\Theta(n+\logp)\)的求出\(n\)个数的逆元例题:LOJ161乘法逆元2#include<cstdio>typedeflonglongll;c......
  • P3811 【模板】模意义下的乘法逆元 题解
    【模板】模意义下的乘法逆元题目背景这是一道模板题题目描述给定n,pn,pn,p求......