ZOJ3609——数论基础 扩展欧几里得求解乘法逆元
来源:互联网 发布:淘宝精品橱窗怎么设置 编辑:程序博客网 时间:2024/06/04 18:01
原题如下:
Description
The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x (mod m)
. This is equivalent toax≡1 (mod m)
.
Input
There are multiple test cases. The first line of input is an integer T ≈ 2000 indicating the number of test cases.
Each test case contains two integers 0 < a ≤ 1000 and 0 < m ≤ 1000.
Output
For each test case, output the smallest positive x. If such x doesn't exist, output "Not Exist".
Sample Input
33 114 125 13
Sample Output
4Not Exist8
题目大意:裸的求模的乘法逆元的题目,要注意得有要是正解。所以若解为负的,得加上解得间隔直到解为正数。间隔为m/gcd(a,m)。
代码如下
#include <stdio.h>#include <algorithm>#include <string.h>#include <cctype>#include <queue>using namespace std;
//欧几里得算法int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}
//扩展欧几里得算法int exgcd(int a,int b,int &x,int &y){ int d=a; if(b!=0) { d=exgcd(b,a%b,y,x); y-=(a/b)*x; } else { x=1; y=0; } return d;}int main(){ int T; scanf("%d",&T); while(T--) { int a,m; scanf("%d%d",&a,&m); if(gcd(a,m)!=1)//如果最大公因数不是1,则表明无解 { printf("Not Exist\n"); continue; } int x,y; exgcd(a,m,x,y); while(x<=0) { x+=m/gcd(a,m);//使结果为正数 } printf("%d\n",x); }}
0 0
- ZOJ3609——数论基础 扩展欧几里得求解乘法逆元
- 欧几里得算法求解乘法逆元——Python
- 乘法逆元(扩展欧几里得)
- 浅谈数论(四)扩展欧几里得算法与乘法逆元
- csu1163扩展欧几里得之乘法逆元
- 乘法逆元与扩展欧几里得
- 乘法逆元的扩展欧几里得解法
- 扩展欧几里得(乘法逆元)
- 扩展欧几里得求乘法逆元
- 扩展欧几里得算法求乘法逆元
- 乘法逆元+扩展欧几里得+Lucas
- 扩展欧几里得求乘法逆元
- 扩展欧几里得 与 乘法逆元
- 【专题】欧几里得算法、扩展欧几里得、乘法逆元
- hdu 1576 A/B (求乘法逆元——扩展欧几里得)
- 数论——扩展欧几里得
- ZOJ3609 Modular Inverse (扩展欧几里得)
- 数论基础 扩展欧几里得 线性筛 逆元 欧拉函数 Lucas定理
- Android界面布局大集合(Fragment+ViewPager)
- (转)73条日常Linux shell命令
- WIN8下安装3.5 + 日语常用
- nrf51822 串口透传广播数据抓包讲解
- html form表单提交后不刷新不跳转的实现方法------
- ZOJ3609——数论基础 扩展欧几里得求解乘法逆元
- protobuf中的variable-integer编码方式
- linux(centos7)+apache+php7 安装教程
- 常用反射操作
- MyEclipse has detected that less than 5% of the 341MB of PS Old Gen(Heap memory) space remains.
- A Knight's Journey(DFS)
- Android自定义标题栏
- hrbust 1041 哈理工oj 1041 Chocolate Auction【线段树+区间更新】
- Qt使用QGraphicsView实现滑动窗体效果