輾轉相除法和移位相減法(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; } 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 迴圈演算法...最大公約數簡便演算法 求最大公約數的4種演算法
求最大公約數的兩種演算法 (專貼)
求最大公約數兩種方法