求最大公約數的兩種演算法

2021-03-31 15:25:25 字數 815 閱讀 3815

輾轉相除法和移位相減法(euclid & stein 演算法)

給出stein演算法如下:

如果a=0,b是最大公約數,演算法結束

如果b=0,a是最大公約數,演算法結束

設定a1 = a、b1=b和c1 = 1

如果an和bn都是偶數,則an+1 =an /2,bn+1 =bn /2,**+1 =** *2(注意,乘2只要把整數左移一位即可,除2只要把整數右移一位即可)

如果an是偶數,bn不是偶數,則an+1 =an /2,bn+1 =bn ,**+1 =** (很顯然啦,2不是奇數的約數)

如果bn是偶數,an不是偶數,則bn+1 =bn /2,an+1 =an ,**+1 =** (很顯然啦,2不是奇數的約數)

如果an和bn都不是偶數,則an+1 =|an -bn|,bn+1 =min(an,bn),**+1 =**

n++,轉4

//greatest ***mon divisor

//by heaton

//2005/03/11

#include

using namespace std;

//交換a ,b的值

void swap(int& a1,int &b1)

//輾轉相除法

int ***(int a,int b)

int main()

/n";

int a=;//應該先按公升序對陣列排序

int x=n***(a,4);

cout<<" value:"<

return 0;

最大公約數簡便演算法 求最大公約數的4種演算法

for z 0 z 10000000 z 迴圈只是為了增加程式的執行時間,讓我們體會演算法的時間複雜度。演算法一 短除法 想法,採用短除法找出2個數的所有公約數,將這些公因子相乘,結果就是2個數的最大公約數。找公因子,只能使用蠻力法 include include void main int m 2...

求最大公約數的兩種演算法 (專貼)

輾轉相除法和移位相減法 euclid stein 演算法 給出stein演算法如下 如果a 0,b是最大公約數,演算法結束 如果b 0,a是最大公約數,演算法結束 設定a1 a b1 b和c1 1 如果an和bn都是偶數,則an 1 an 2,bn 1 bn 2,1 2 注意,乘2只要把整數左移一位...

求最大公約數兩種方法

說是兩種方法,其實他們本質是一樣的,只是一種用遞迴,另一種是迴圈的改寫罷了。遞迴演算法 最大公約數 param num1 第乙個數 param num2 第二個數 return 返回最大公約數 public static long gcb long num1,long num2 else 迴圈演算法...