A Number Theoretical Problem


知识点:逆元+拓展欧几米得算法
当方程符合ax+by=gcd(a,b)时,可以采用欧几里得算法求(x,y)
代码:
#include<iostream>
#include <algorithm>
#include <stdio.h>
#define ll long long
using namespace std;
ll exgcd(ll a,ll b,ll &x,ll &y)//扩展欧几里得算法,求x,y
{
if(b==0)
{
x=1,y=0;
return a;
}
ll ret=exgcd(b,a%b,y,x);
y-=a/b*x;
return ret;
}
ll getinv(int a,int mod)//求a在mod下的逆元,不存在逆元返回-1
{
ll x,y;
ll d=exgcd(a,mod,x,y);
return d==1?(x%mod+mod)%mod:-1;
}
int main(){
int t;
scanf("%d",&t);
while (t--) {
ll a,b;
scanf("%lld%lld",&a,&b);
printf("%lld\n",getinv(a,b));
}
return 0;
}
浙公网安备 33010602011771号