程式設計關於擴充套件的歐幾里得演算法的問題

2021-03-03 21:00:16 字數 4157 閱讀 8973

1樓:我是百人敵

x,y全是復

整數(lz不否定吧)制

肯定有乙個正數

,bai另乙個負數。

若有du正數的要求,設zhia / ***(a,b) = a' b/***(a,b) = b'

則有a * b' = b * a'

這樣,x增加daoa', y增加b' 可保證ax+by = ***(a,b)

(未考慮a,b為負數)

用c語言編寫擴充套件歐幾里德演算法用來求乘法逆元ab=1 mod(n) 要求我輸入b,n,求出a。請編譯執行通過,謝謝啦

2樓:有錢買不起房子

#include

int extendedeuclid( int f,int d ,int *result);

int main()

int extendedeuclid( int f,int d ,int *result)

if ( y3 == 1 )

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;}}

/*輸入兩個數:

5 14

5和14互素,乘法的逆元是:3*/

3樓:匿名使用者

這是乙個錯誤的演算法啊

關於擴充套件歐幾里德演算法

4樓:數論_高數

-n*n'%r=n*n'%r=1不成立

n'如果算出是負數不能忽略符號

n'=-n^(-1)%r=(r-n)^(-1)%r可以化其中n^(-1)是不是n的倒數?是數論倒數n^(-1)*n被模r除餘1

5樓:匿名使用者

負號當然不能丟掉。

1 % 4 = 1

3 % 4 = -1

這倆不相等。

擴充套件歐幾里德演算法是什麼?

6樓:xhj北極星以北

擴充套件歐幾里德演算法是用來在已知a, b求解一組x,y,使它們滿足貝祖等式: ax+by = ***(a, b) =d(解一定存在,根據數論中的相關定理)。擴充套件歐幾里德常用在求解模線性方程及方程組中。

下面是乙個使用c++的實現:

intr=ex***(b,a%b,x,y);

intt=x;x=y;y=t-a/b*y;

return r;

}把這個實現和***的遞迴實現相比,發現多了下面的x,y賦值過程,這就是擴充套件歐幾里德演算法的精髓。

7樓:聰智寶貝

擴充套件歐幾里德定理

對於不完全為 0 的非負

整數 a,b,***(a,b)表示 a,b 的最大公約數,必然存在整 數對 x,y ,使得 ***(a,b)=ax+by。

c++語言實現

#include using namespace std; int x,y,q; void extend_eulid(int a,int b) else } int main()

擴充套件歐幾里得演算法

8樓:諾諾愛熊貓

//歐幾公尺德演算法 //演算法描述:給定兩個正整數m和n,求他們的最大公因子。 //1.

[求餘數]用m除以n並令r為所得餘數 //2.[餘數為0]若r=0,則演算法結束,n即為所求答案 //3.[互換]置m←n,n←r,並返回步驟1。

#include #include using namespace std; int main(int argc, char *argv) cout << m<< endl; system("pause"); return exit_success; }

麻煩採納,謝謝!

用擴充套件歐幾里得(euclid)演算法計算1234 mod 4321的乘法逆元

9樓:匿名使用者

q x1 x2 x3 y1 y2 y3

1 0 4321 0 1 1234

3 0 1 1234 1 -3 619

1 1 -3 619 -1 4 615

1 -1 4 615 2 -7 4

153 2 -7 4 -307 1075 3

1 -307 1075 2 309 -1082 1

4321-1082=3239

10樓:匿名使用者

1234 mod 4321 的乘法逆元是怎麼算的啊,求教

擴充套件的歐幾里得演算法求逆元

11樓:匿名使用者

數對 x,y ,使得 ***(a,b)=ax+by。

c++語言實現

#include

#include

using namespace std;

int x,y,q;

void extend_eulid(int a,int b)else

}int main()

你給的題目實際上就是: 給定 a 和b。

a 要有逆元 , 那麼***( a , b ) = 1假設a的逆元 為x , 那麼就有 a * x mod b = 1

也就是 a * x + b * y = 1上面的程式中輸入a和b就可以求出對應的x和y。

其中 x 就是 a的逆元

用c語言編制的求模逆元的擴充套件歐幾里德演算法,只要能基本上實現這個功能就行

12樓:匿名使用者

//舉例 3x+4y=1 ax+by=1

//得到一組解x0=-1,y0=1 通解為x=-1+4k,y=1-3k

返回a,b的***,同時求的一組滿足題目的最小正整數解

ans=extend_***(b,a%b,x,y);t=x;x=y;y=t-(a/b)*y;

return ans;

}//(a/b)%mod=c 逆元為p,(p*b)%mod=1

//(a/b)*(p*b)%mod=c*1%mod=c

// (p*b)%mod=1 等價於 p*b-(p*b)/mod*mod=1其中要求p,b已知 等價於 ax+by=1

//其中x=p(x就是逆元),y=p/mod,a=b,b=b*mod 那麼呼叫extend_***(b,b*mod,x,y)即可求(a/b)%mod的逆元等價於a*p%mod

int main()

cout<<"x="<請大神指教關於擴充套件歐幾里得演算法,關於擴充套件歐幾里德演算法

你可以把擴 抄展歐幾裡襲德演算法當成歐幾里德bai演算法 即輾轉相du除法 的逆演算法。zhi在使用輾轉相除法dao是保留運算過程,比如求 a,b 時a b k1 c b c k2 d 當d a,b 時 可得d b k2 a b k1 關於擴充套件歐幾里德演算法 n n r n n r 1不成立 n...

使用歐幾里得演算法,求給定兩個整數的最大公約數

歐幾里德演算法 歐幾里德演算法又稱輾轉相除法,用於計算兩個整數a,b的最大公約數。其計算原理依賴於下面的定理 定理 a,b b,a mod b 證明 a可以表示成a kb r,則r a mod b 假設d是a,b的乙個公約數,則有 d a,d b,而r a kb,因此d r 因此d是 b,a mod...

關於程式設計的困惑,關於程式設計的困惑

學習和程式設計並不矛盾 寫作文時要求主題清楚,層次分明,同樣你也就應該這樣做,目前主題是學習。潦草不是程式設計的問題,程式設計要求條理清楚 邏輯正確,學習同理也是這樣的。學習還是要努力的,現在學習不努力,將來努力找工作。現在程式設計只是你的愛好,只應佔你的業餘時間,不應該占用你的學習時間,而且不能為...