ZOJ 3609 求最小逆元模板题

来源:互联网 发布:甲骨文软件 薪资 编辑:程序博客网 时间:2024/06/13 13:45


Modular Inverse

Time Limit: 2 Seconds      Memory Limit: 65536 KB

The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1x (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

33 114 125 13

Sample Output

4Not Exist8
分析:

ax=1(mod m);    我们称x是a关于m的最小乘法逆元。 相当于 a*x%m=1%m  

那么(a*x-1)就必须是m的整数倍才行。所以我们设是m的y倍。

于是式子转化成: (a*x-1)=m*y; 

那么 ax-my=1 要有解,相当于是 ax+my=1要有解,这里m如果是负的话,那么就写成正的好了,因为系数是没有关系的。

#include<iostream>#include<cstdio>using namespace std;typedef long long LL;void gcd(int a,int b,int &d,int &x,int &y){if(!b) {d=a,y=0,x=1;}else{gcd(b,a%b,d,y,x);y-=x*(a/b);}}int main(){//freopen("E:\\ACM\\test.txt","r",stdin);int T,a,m;cin>>T;while(T--){cin>>a>>m;int x,y,d,b=m,c=1;gcd(a,b,d,x,y);if(c%d) puts("Not Exist");else{//x=x*c/d;//b=b/d;x=x%b;if(x<=0) x+=b;//x=(x%b+b)%b;cout<<x<<endl;}}return 0;}
阅读全文
0 0
原创粉丝点击