扩展欧几里得求逆元

#include<cstdio>
    int a,b,c,x,y;
int exgcd(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x=1;
        y=0;
        return a;
    }
    int tmp=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return tmp;
}
int main()
{
    scanf("%d %d %d",&a,&b,&c);
    int k=exgcd(a,b,x,y);
    if(c%k)
    {
        printf("no solution!");
        return 0;
    }
    x*=c/k;
    y*=c/k;
    printf("%d %d",x,y);
}

#include<cstdio>
    int a,b,c,x,y;
int exgcd(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x=1;
        y=0;
        return a;
    }
    int tmp=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return tmp;
}
int main()
{
    scanf("%d %d %d",&a,&b,&c);
    int k=exgcd(a,b,x,y);
    if(c%k)
    {
        printf("no solution!");
        return 0;
    }
    int p=b/k;
    x=(x+p)*(c/k);
    x=(x%p+p)%p;
    y=(c-a*x)/b;
    printf("%d %d",x,y);
}

猜你喜欢

转载自blog.csdn.net/zsyz_ZZY/article/details/80269290