程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 歐幾裡德算法(C語言)

歐幾裡德算法(C語言)

編輯:關於C語言

俠客行
#include <stdio.h>
void luwei_gcd(int a,int b,int &d,int &x,int &y )
{
        if(b==0) //對於ax+by=d且b=0,顯然有x=1(因為gcd(a,b) = d,可知a=d)
        {
                d=a;
                x=1;
                y=0;
                return ;
        }
        luwei_gcd(b,a%b,d,y,x);//a*x+b*y=d可轉化為b*y+(a%b)*(y-x*(a/b))=d
        y -= x * (a/b) ;//在回溯時x = y,y = y-x*(a/b),更新x,y的值
}
// ax ≡ 1 (mod n) 滿足gcd(a,n) = 1,該問題可化為ax + bn = 1,然後上面的函數,即可求出x
int shuchu (int a ,int n)
{
        int d,x,y ;
        luwei_gcd(a,n,d,x,y);
        if(d==1) //ax + bn = 1
        {
                x=x%n;
                if(x<0)
               return (x+n)%n;//返回的值保證是正數
               printf("a mod b 的逆元為:%dn",x);
               printf("b mod a 的逆元為:%dn",(1-a*(x-26))/n);
        }
        else
                printf("a 與 b 不互素,不存在逆元n");
}

int main()
{
    int a,b;
    printf("輸入兩個正整數:(a<b)n");
    scanf("%d%d",&a,&b);
    shuchu(a,b);
    return 0;
}

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved