C語言求多個數的最大公因數

2010-02-14 12:51 am
請幫忙撰寫:
1.求三個數i,j,k之最大公因數之程式
2.求a[n]等n個數的GCD的最大公因數的程式(ps.個人通常不會去用a[0])

回答 (8)

2010-02-14 11:28 pm
✔ 最佳答案
在給答案之前
有一些逆耳之言得說一下
求最大公因數是學寫程式最基本的問題
除非是真的寫不出來
否則
這樣的問題實在應該自己寫

我的答案
http://nopaste.csie.org/c00f8

2010-02-17 8:33 am
hmm...

我記得好像在哪裡寫過,
就先scanf第一個數字,
再用迴圈陸續讀剩下的數字,
第一個數字和第二個的取GCD,
這個GCD再綠續和後來進來的一一取GCD,
最後這就是答案了,
這用在數據由操作者使用時比較方便,
不用開陣列,只需要兩三個變數。
2010-02-16 6:28 pm
針對第二題,以下供您參考

#include
#include
int GCD(int a, int b){
int r;
if(a























2010-02-16 10:29:47 補充:
while(1){
printf("(輸入0代表離開程式)\\n");
printf("請輸入n質。\\n");
n=get_number();
printf("請輸入%d個自然數。\\n", n);
a=(int*)malloc(n*sizeof(int));
for(i=0; i



2010-02-16 10:30:41 補充:
for(i=0; i





2010-02-15 3:22 pm
這是我 在 2010年2月14日 12:17:40 已 post 上的答案

#include
#include
#include


int GCD(int a, int b)
{ while (b)
{ int c = a % b;
a = b;
b = c;
}
return a;
}

2010-02-15 07:23:31 補充:
int main(void)
{ int *a, G, i, n, *p;

srand((unsigned) time(NULL)); rand();

n = (rand() >> 6) + 3; // At least 3 elements
a = (int *) malloc(sizeof(*a) * n);
if (a == NULL)
exit(1);

for (i=n, p=a; --i >= 0; ++p)
(*p = rand()) ++ ; // ++: to prevent 0

2010-02-15 07:24:23 補充:
G = GCD(*a, a[1]); // Use a[0], a[1], and a[2] as i, j, k
G = GCD(G, a[2]);
printf("The GCD of %d, %d, and %d is %d.\\n", *a, a[1], a[2], G);

G = GCD(*a, a[1]);
for (i=n, (p=a) ++ ; --i && G!=1; ++ p)
G = GCD(G, *p);
printf("The GCD of the %d numbers is %d.\\n", n, G);

2010-02-15 07:26:54 補充:
system("pause");
free(a);
return 0;
}



其中除了加點空白以防被知識+ 吃字外,沒做任何修改。
當然,意見中的排版早已被知識+ 毀了!
回答時的排版較好。
2010-02-14 9:11 pm
同意Jacob Lee大大所言
不用a[0]是個壞習慣

另外
不知道是不是我誤解
原始人大大所設計的程式
似乎是隨機產生3數然後求最大公因數
不過ivann版大要的可能是輸入3數來求
如果真的是這樣
ivann版大應該可以自己將產生隨機數列那段程式碼改成輸入資料的程式碼
如果不是
那當我多話
2010-02-14 6:37 pm
學習使用陣列 是學C&C++等等的基礎
2010-02-14 7:08 am
就寫一個副程式專門做兩數最大公因數
再跑完整個array就好啦...
2010-02-14 1:33 am
不用 a[0] 是不良設計習慣!


收錄日期: 2021-04-21 12:32:07
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20100213000010KK04398

檢視 Wayback Machine 備份