ZOJ3609——数论基础 扩展欧几里得求解乘法逆元
2016-03-24 13:11
351 查看
原题如下:
Description
The modular modular multiplicative inverse of an integer a modulo m is an integer x such that
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
Sample Output
题目大意:裸的求模的乘法逆元的题目,要注意得有要是正解。所以若解为负的,得加上解得间隔直到解为正数。间隔为m/gcd(a,m)。
代码如下
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cctype>
#include <queue>
using namespace std;
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 to
ax≡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
3 3 11 4 12 5 13
Sample Output
4 Not Exist 8
题目大意:裸的求模的乘法逆元的题目,要注意得有要是正解。所以若解为负的,得加上解得间隔直到解为正数。间隔为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); } }
相关文章推荐
- 329. Longest Increasing Path in a Matrix
- (转)73条日常Linux shell命令
- html form表单提交后不刷新不跳转的实现方法------
- WIN8下安装3.5 + 日语常用
- lintcode-medium-Kth Largest Element
- Java学习之HashMap和Hashtable的区别
- Android界面布局大集合(Fragment+ViewPager)
- ccache高速编译工具
- (转)探索 .git 目录,让你真正了理解git
- Spring Cron Expression
- pycnn xor实例
- cookie的使用
- (转)git相关的基本操作都在此篇
- Opencv imread 不能正常读取
- Matlab的BwLabel实现
- Java学习之Iterator(迭代器)的一般用法
- items 排序 0
- 关于Activity启动模式的理解
- 丘比龙的女神
- makefile函数