歐幾裡得算法 解決的問題是:尋找兩個給定的正整數m和n的最大公約數
下面是C#代碼的 歐幾裡得算法
public int MaxDivisor(int a, int b)
...{
int max=a>=b?a:b;//得到最大數
int min=a<b?a:b;//得到最小數
int r=1; //余數
while (r> 0)
...{
r = max % min; //求模
max = min;
min = r;
}
return max;
}
歐幾裡得算法的擴展,問題描述如下:
尋找兩個給定的正整數m和n的最大公約數d 和兩個整數,使得a*m+b*n=d
下面是C#的 歐幾裡得算法擴展的代碼
public int MaxDivisorex(int sum1, int sum2, out int a, out int b)
...{
int tmp_b=a = 0;
int tmp_a=b = 1; //tmp_b tmp_a 是 輔助變量
int max = sum1 >= sum2 ? sum1 : sum2;//得到最大數
int min = sum1 < sum2 ? sum1 : sum2;//得到最小數
int q = 0; //商
int r = 1; //余數
q = max / min;
r = max % min;
max = min;
min = r;
while (r > 0)
...{
int tmp = tmp_a;
tmp_a = a;
a = tmp - q * a;
tmp = tmp_b;
tmp_b = b;
b = tmp - q * b;
q = max / min;
r = max % min;
max = min;
min = r;
}
return max;
}
結果驗證
int a, b;
int r = MaxDivisorex(1769, 551, out a, out b);
MessageBox .Show(string.Format ("{0} * 1769 + {1} *551 = {2}",a,b,(a*1769+b*551)));這個算法不是很復雜,不過要清楚還真是費事,等我可以解釋得很簡單的時候我再解釋好了,現在相當於我自己的讀書筆記。
如果有人能簡單的解釋出來的話,也麻煩留下言。謝謝。。。