[問題] 傳入陣列求最大公因數和判斷質數的問題

看板C_and_CPP (C/C++)作者 (0.0)時間16年前 (2009/05/08 23:18), 編輯推噓2(205)
留言7則, 5人參與, 最新討論串1/1
我輸入幾個數字 並且將它存在陣列裡 然後 想要求出他們的最大公因數 我想要直接寫一個副程式 可以直接計算N個數的最大公因數 EX: A B C D A與B求完最大公因數後 在和C做最大公因數 接著在和D做最大公因數 遇到瓶頸是 我副程式寫不好~ 最基本的兩個我會寫 但是 N個的 我就寫不出來了 以下是程式碼 請各位大大幫個忙~ #include<stdio.h> #include<stdlib.h> int gcd(int *k,int x){ int tmp=1,y; y=x; k[y]=0; for(x=0;x<y;x++){ while(tmp!=0){ tmp=k[x]%k[x+1]; k[x]=k[x+1]; k[x+1]=tmp; k[y]=k[x]; if(k[y]!=0 && k[x+1]!=0){ k[x]=k[y]; tmp=k[x]%k[x+1]; k[x]=k[x+1]; k[x+1]=tmp; k[y]=k[x]; } } } printf("最大公因數是%d\n",k[x]); return k[x]; } int main(void){ int a,i,tmp,b; int test[256]; printf("input number:"); scanf("%d",&b); for(i=0;i<b;i++){ printf("number%d:\n",i+1); scanf("%d",&test[i]); } a=gcd(test,b); printf("%d\n",a); if(a==2){ printf("YES\n"); }else if(a==1){ printf("不是質數\n"); }else{ for(i=2;i<a;i++){ tmp=a%i; if(tmp==0){ printf("不是質數\n"); exit(1); }else{ printf("YES\n"); exit(1); } } } return 0; } 副程式怪怪的 不太會寫 請各位大大幫忙了~感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.74.222

05/08 23:22, , 1F
你不是已經寫出作法了:) 用個for就可以達成了吧
05/08 23:22, 1F

05/08 23:24, , 2F
gcd = GCD( gcd, 第i個 );
05/08 23:24, 2F

05/08 23:26, , 3F
寫一個副程式算兩個數gcd, 然後你可以先算頭兩個數的gcd
05/08 23:26, 3F

05/08 23:27, , 4F
然後像2F說的, 算目前的gcd和第i個數的gcd, i就從第三個
05/08 23:27, 4F

05/08 23:28, , 5F
數, loop到最後一個數就行了....:)
05/08 23:28, 5F

05/08 23:31, , 6F
大概了解 試試看 感謝大大
05/08 23:31, 6F

05/09 09:14, , 7F
這題我期中考考過~
05/09 09:14, 7F
文章代碼(AID): #1A14rHWQ (C_and_CPP)
文章代碼(AID): #1A14rHWQ (C_and_CPP)