关于逆元(费马小定理,exgcd)
1.逆元是个什么东西
首先这里有个式子: ((( ab\frac{a}{b}ba ))) modmodmod ppp,这个式子的答案怎么求呢??
A 直接求不行吗?
Q别想了不能。我们发现一个分数 mod 一个整数时是不能直接模运算的,但是可以进行乘法运算,我们就要用到逆元(大概可以看做一个数%p意义下的倒数吧)
除以一个数模ppp,就等于乘以一个数在mod p意义下的逆元
也就是说,它的定义可以表示为ax≡1ax≡1ax≡1 (mod(mod(mod n)n)n)
2. 求逆元的方法之——费马小定理
- 费马小定理:对于整数 a 与质数 p ,若 a 与 p 互质,则有: ap−1≡1a^{p−1}≡1ap−1≡1 modmodmod ppp
- 求逆元:ap−1≡1a^{p−1}≡1ap−1≡1 modmodmod ppp故ap−2∗p≡1a^{p−2}*p≡1ap−2∗p≡1 modmodmod ppp,所以ap−2a^{p−2}ap−2为aaa modmodmod ppp意义下的逆元
- 代码(就是个快速幂)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
ll a,b,p,r;
ll n;
ll ksm(ll a,ll b,ll p)
{ll r=1;while(b){if(b&1)r=r*a%p;b>>=1;a=a*a%p; }return r;
}
int main()
{cin>>n>>p;for(int i=1;i<=n;i++)
{ll hh=ksm(i,p-2,p);cout<<hh<<endl;}
}
3.方法二——扩展欧几里得
- exgcd可以用来判断并求解形如ax+by=cax+by=cax+by=c 的方程,当且仅当gcd(a,b)∣cgcd(a,b)∣cgcd(a,b)∣c,存在整数解x,yx,yx,y
- 证明:扩欧证明
- 求逆元:
设mmm为aaa的逆元,那么有am≡1(am≡1(am≡1( modmodmod p)p)p)
那么显而易见地我们可以写成am−pn=1am-pn=1am−pn=1
然后就可以exgcd解啦 - 代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
void read(int &x)
{int f=1;x=0;char s=getchar();while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}while(s<='9'&&s>='0'){x=x*10+s-'0';s=getchar();}x=f*x;
}
int n,p;
void exgcd(int a,int b,int &x,int &y)
{int t;if(b==0){x=1;y=0;return;}exgcd(b,a%b,x,y);t=x;x=y;y=t-(a/b)*y;
}
int main()
{read(n);read(p);register int x,y;for(int i=1;i<=n;i++){exgcd(i,p,x,y);cout<<(x+p)%p;putchar('\n');}
}
4.线性求逆元
虽然已经有2种方法,但是对于这样的题模板还是会TTT
于是我们不得不学习线性逆元
就可以使用递推法 。
iii 模 ppp 意义下的逆元 inv(i)inv(i)inv(i)可表示为 :
inv(i)=−⌊pi⌋×inv(p%i)%p\large inv(i) = -\lfloor \frac{p}{i}\rfloor \times inv(p\% i)\% pinv(i)=−⌊ip⌋×inv(p%i)%p
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
void read(int &x)
{int f=1;x=0;char s=getchar();while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}while(s<='9'&&s>='0'){x=x*10+s-'0';s=getchar();}x=f*x;
}
int n,p;
ll a[5000005];
int main()
{read(n);read(p);a[1]=1;for(int i=2;i<=n;i++){a[i]=(ll)p-(p/i)*a[p%i]%p;}for(int i=1;i<=n;i++)printf("%d\n",a[i]);
}
没了qwq没了qwq没了qwq
关于逆元(费马小定理,exgcd)相关推荐
- 除法取模与逆元/费马小定理
对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做模的逆元. 逆元一般用扩展欧几里得算法来求得,如果为素数,那么还可以根据费马小定理得到逆元为.(都要求a和m互质) 推导过程如下(摘自Acd ...
- 子段乘积(逆元费马小定理)+线段树做法
题解:一开始做这个题的时候想过尺取法,但是因为没有逆元的知识,不知道该如何不断删除左端元素.其实这题并不难想,设l,r为两端开始都置为1,当长度小于k的时候不断乘右端元素并取余,当长度等于k时删除左端 ...
- 逆元+费马小定理+扩展欧几里得
逆元:(即是逆元素)逆元素是指一个可以取消另一给定元素运算的元素. 在一个代数系统(S,*)中,存在单位元素e,如果对S内的元素a存在a^-1 * a = e,则将 a^-1称为a 的左逆元. 同理若 ...
- 计算系数(二项式定理逆元费马小定理)
给定一个多项式(ax+by)^k,请求出多项式展开后(x^n)*(y^m)项的系数. 输入格式 共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开. 输出格式 输出共 ...
- jzoj4229-学习神技【逆元,费马小定理】
正题 题目大意 求 (∑i=1na∗qi)mod(109+7)(\sum_{i=1}^na*q^i)\ mod\ (10^9+7)(i=1∑na∗qi) mod (109+7) 解题思路 题目里都给 ...
- 取模除法(逆元)(费马小定理)(线性求逆元)
文章目录 引言 逆元 费马小定理 内容 应用 证明 线性求逆元 thanks for reading! 引言 我们做题时经常会由于答案过大,被要求使答案对一个质数取模 我们都知道,加和乘对取模是没有影 ...
- 费马小定理以及快速幂应用
费马小定理 定理 例子 代码 逆元 快速幂代码 快速幂求逆元 定理 假设p为质数,a不是p的倍数,则有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1(mod \spa ...
- 同余定理 逆元 中国剩余定理 费马小定理
同余定理 同余定理是数论中的重要概念.给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m). 两个整数a ...
- luogu P2613 【模板】有理数取余(费马小定理,乘法逆元)
整理的算法模板合集: ACM模板 目录 题目传送门 题目传送门 相当于是一个高精的费马小定理求乘法逆元.虽然数据达到了101000110^{10001}1010001,但是我们可以使用快读然后一直模m ...
最新文章
- 参加软件测试培训前景怎么样
- ie下LI的间距问题
- 三角形内随机生成一个点
- 87说明书 ikbc_女性玩家的首选!——IKBC白无垢. 樱机械键盘赏评
- web面试常见问题补充
- java api 第一个类是_JAVA常用API:String 类的常用方法
- Vue-cli 自定义配置
- 火狐浏览器允许ajax,ajax如何解决火狐浏览器或其它非ie浏览器的兼容性问题
- 下一代Jquery模板-----JsRender
- consul服务注册与服务发现的巨坑
- mac 发现 添加 连接 局域网内打印机
- R语言:时间序列ARIMA模型使用
- MobaXterm快捷输入
- 网络编程day1-本地信息的获取
- 网页调用QQ客服的API
- html5 游戏 黑屏,战地5游戏最新黑屏无限加载解决方法
- ”周期天王”20大预言,针针见血,看完整个人通透多了
- linux strip作用,linux gcc strip命令简介
- 一个tesseract ocr box 文件查看toy,python
- 微信小程序内,生成自定义二维码