//
// main.c
// GCD
//
// Created by andy on 15/5/11.
// Copyright (c) 2015年 Andy. All rights reserved.
//
#include <stdio.h>
#define max(x,y) x > y? x : y
#define min(x,y) x < y? x: y
int GCD(int,int);
int GCD1(int,int);
// 兩數的最大公約數 等於 其中較小數和兩數的差的最大公約數
// 輾轉相除法:
// 不斷縮小這兩個數,直到其中一個變爲0,這樣那個不爲0的數就是兩個數的最大GCD(Greastest Common Divisor)
int main(int argc, const char * argv[]) {
printf("%d",GCD1(105, 252));
return 0;
}
// 這個輾轉相除法??直接找出 兩數求餘的 最小公倍數*n 再通過較小數和 最小公倍數*n 之間再計算
int GCD(int a,int b) {
int ma = max(a, b);
int mi = min(a, b);
printf("(ma,mi)->(%d,%d)\n\n",ma,mi);
if (ma % mi != 0) { // 兩數之差不爲0
printf("GCD(a,b)->(%d,%d)\n\n",mi,(ma % mi));
return GCD(mi, (ma % mi)); // 接着計算較小數和兩數之差的GCD
}
return mi;
}
// 輾轉相除法(歐幾里德算法)
int GCD1(int a,int b) {
int ma = max(a, b);
int mi = min(a, b);
printf("(ma,mi)->(%d,%d)\n\n",ma,mi);
if (mi != 0) { // 兩數之差不爲0
printf("GCD(a,b)->(%d,%d)\n\n",mi,(ma % mi));
return GCD1(mi, (ma - mi)); // 接着計算較小數和兩數之差的GCD
}
return ma;
}
輾轉相除法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.