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 Exist8
分析:题目让求a相对于m的逆元 x
从题目可以知道 gcd(a,m)=1;
扩展欧几里德 a*x+m*y=gcd(a,m)
求出x
AC代码:
#include<stdio.h> #include<string.h> long long kzgcd(long long a,long long b,long long &x,long long &y) { if(b==0) { x=1,y=0; return a; } long long ans=kzgcd(b,a%b,x,y); long long t=x; x=y; y=t-a/b*y; return ans; } long long solve(long long a,long long b) { long long x,y; long long gcd=kzgcd(a,b,x,y); if(1%gcd) return -1; b/=gcd; if(b<0) b=-b; long long ans=x%b; if(ans<=0) ans+=b; return ans; } int main() { int T; scanf("%d",&T); while(T--) { long long a,m; scanf("%lld%lld",&a,&m); long long ans=solve(a,m); if(ans==-1) printf("Not Existn"); else printf("%lldn",ans); } }
最后
以上就是年轻冬日最近收集整理的关于ZOJ - 3609 Modular Inverse (扩展欧几里德求乘法逆元)的全部内容,更多相关ZOJ内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复