乘法逆元
来源:互联网 发布:spd7网络信号避雷器 编辑:程序博客网 时间:2024/05/16 04:01
概述
对于一个模方程
那么求
ps:和模方程一样,当(a,m)|1(即(a,m)=1)的时候存在解,否则无解。
方法1
用扩展欧几里得算法即可求得x。
int exgcd(int a,int b,int &x,int &y){ if (!b) {x=1;y=0;return a;} int r=exgcd(b,a%b,x,y),t=x;x=y;y=t-a/b*y; return r;}int mul_INV(int a,int m){ int x,y;if (exgcd(a,m,x,y)!=1) return -1; return (x%m+m)%m;}
方法2
一种递推的算法,可以
首先
同乘
所以说INV[i]=-(p/i)*INV[p%i]
。
方法3
根据费马小定理,当p为素数,a为正整数,
模板
HDU1576,求A/B%MOD。
#include<cstdio>using namespace std;const int MOD=9973;int te,A,B;int exgcd(int a,int b,int &x,int &y){ if (!b) {x=1;y=0;return a;} int r=exgcd(b,a%b,x,y),t=x;x=y;y=t-a/b*y; return r;}int mul_INV(int a,int m){ int x,y;if (exgcd(a,m,x,y)!=1) return -1; return (x%m+m)%m;}int main(){ freopen("mul_INV.in","r",stdin); freopen("mul_INV.out","w",stdout); scanf("%d",&te); for (int i=1;i<=te;i++) { scanf("%d%d",&A,&B); printf("%d\n",A*mul_INV(B,MOD)%MOD); } return 0;}
阅读全文
1 0
- 乘法逆元
- 乘法逆元
- 关于乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 求乘法逆元
- 求乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元基础知识
- 乘法逆元
- 乘法逆元
- 乘法逆元
- 乘法逆元求法
- 一心想去今日头条,看看现在的招聘,警醒自己,每天不能太放纵,要想提高就得不断学习,拼命努力
- strtok()函数和getopt()函数
- Linux进程间通信之共享内存
- 内存分配
- listview条目的数据都一样,肿么办
- 乘法逆元
- ELFhash
- 二叉查找树
- 通讯方式
- 找出字符串中最长数字
- 6.3
- Ubuntu用户权限管理(chown, chmod)
- AndroidManifest.xml文件详解(service)
- OpenGL学习(一)——画一个三角形