用扩展的欧几里德算法求最大公约数以及逆元

#include

void exgcd(int d,int f)
{
    int x1,x2,x3,y1,y2,y3,q,t1,t2,t3;

    x1=1;x2=0;x3=f;
    y1=0;y2=1;y3=d;

    while(y3>0)
    {
        q=x3/y3;
        t1=x1-q*y1;
        t2=x2-q*y2;
        t3=x3-q*y3;

        x1=y1;
        x2=y2;
        x3=y3;

        y1=t1;
        y2=t2;
        y3=t3;

        if(y3==1)
        {
          printf("%d和%d互素 逆元是%d/n/n",d,f,y2);
          break;
        }

     }

    if(y3==0)
    {
        printf("%d和%d无逆元,他们的最大公约数是%d/n/n",d,f,x3);
    }

}

void main()
{
    int a,b;

    printf("/n用扩展的欧几里德算法求最大公约数以及逆元/n");
    printf("/n请输入两个整数:/n");
    scanf("%d %d",&a,&b);

    exgcd(a,b);

}

你可能感兴趣的:(用扩展的欧几里德算法求最大公约数以及逆元)