求解逆元

(http://acm.hust.edu.cn/vjudge/contest/view.action?cid=79840#problem/E)
密码:nefu2014

#include <iostream>
#include <cstdio>
using namespace std;
void exgcd(int a,int b,int &x,int &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return ;
    }
    exgcd(b,a%b,x,y);
    int tmp=x;
    x=y;
    y=tmp-(a/b)*y;
}
int gcd(int  m,int n)
{
    if(n==0)
        return m;
    return gcd(n,m%n);
}
int main()
{
    int T,a,n,x,y;
    cin>>T;
    while(T--)
    {
        cin>>a>>n;
        int d=gcd(a,n);
        if(1%d!=0)
            puts("Not Exist");
        else
        {
          exgcd(a,n,x,y);
          x=(x%n+n)%n;//逆元
          if(x==0)
            x++;
          cout<<x<<endl;
        }
    }
    return 0;
}

你可能感兴趣的:(逆元)