求最大公約數 Stein演算法

2021-08-17 03:32:08 字數 685 閱讀 8432

偽**:

stein演算法(假設0<=br←0

while b>0

do if a偶,b偶 then a←a>>1   b←b>>1   r←r+1

else if a偶,b奇 then a←a>>1

else if a奇,b偶 then b←b>>1

else if a奇,b奇 then a←(a-b)>>1

if areturn a<

unsigned maxdivisor(unsigned a, unsigned b)   

else

if(!(a & 1) && (b & 1)) 

//a偶 b奇 

else

if((a & 1) && !(b & 1)) 

//a奇 b偶 

else

if((a & 1) && (b & 1)) 

//a,b都是奇數 

}  }   

1.a,b均為偶,明顯有公約數2

2.a,b奇偶性不同,則偶數的2可以去掉,因為不可能和奇數有公約數

3.a,b均為奇,此時可能有奇數的公約數

a = k * x,b = k* y (k為奇)

a = a - b = k * (x - y)

不斷減小其他因子,直到最後a = b,相減a = 0,則b為k,再左移(即乘上之前的2^c)

最大公約數簡便演算法 最大公約數演算法

1 查詢約數法 先分別找出每個數的所有約數,再從兩個數的約數中找出公有的約數,其中最大的乙個就是 最大公約數 例如,求 12 和 30 的最大公約數 12 的約數有 1 2 3 4 6 12 30 的約數有 1 2 3 5 6 10 15 30 12 和 30 的公約數有 1 2 3 6,其中 6 ...

求最大公約數

最新用了三種演算法實現了求最大公約數的演算法,用的c 寫的,最大公約數也是我們生活中常見的問題 1 窮舉法 主要 如下 if a b for i 1 i a i 演算法分析 窮舉法先將a,b兩值比較大小並且互換,再進行與各種數的整除,如果這個數能同時被a,b整除,那麼這個數就為最大公約數,這種演算法...

求最大公約數

暴力列舉法很簡單,從較小整數的一班開始,試圖找到乙個合適的整數i,檢查這個整數i是否被a和b同時整除 暴力列舉法求最大公約數 param a param b return public static int getgreatestcommondivisor v1 int a,int b for in...