###実現したいこと
関数int gcd(int x,int y)
を作って最大公約数を求めたい。
※ユーグリッド互除法を使う
###問題点
戻り値ans
が0になってしまう。
2つの正整数x,yを入力 391 493 デバック最大公約数0 デバック最大公約数0 391と493の最大公約数は0なので互いに素ではない
###試したこと
・if(x<y)
を消してやってみたが実行結果が変わらなかったのでここは合っている。
・gcd
関数内のans
の出力で0となったのでint main
内の間違えではない。
###参考
こちらを参考にしてみましたが分かりませんでした。→ユーグリッド互除法
よろしくお願いします!
###コード
C
1#include<stdio.h> 2 3//ユーグリッドの互除法を用いて2つの正の整数の最大公約数を求める関数 4int gcd(int x,int y) 5{ 6 int tmp=0; 7 int ans=0; 8 //xよりyが大きければ入れ替える 9 if(x<y){ 10 tmp=x; 11 x=y; 12 y=tmp; 13 } 14 15 //ユーグリッド 16 while(ans!=0){ 17 ans=x%y; 18 x=y; 19 y=ans; 20 } 21 printf("デバック最大公約数%d\n",ans); 22 return ans; 23} 24 25int main(void) 26{ 27 int x,y; 28 int n=0; 29 30 //1が入力されたらループを抜ける 31 while(1){ 32 printf("2つの正整数x,yを入力 "); 33 scanf("%d",&x); 34 scanf("%d",&y); 35 if(gcd(x,y)==1){ 36 printf("%dと%dの最大公約数は1なので互いに素である\n",x,y); 37 }else{ 38 printf("%dと%dの最大公約数は%dなので互いに素ではない\n",x,y,gcd(x,y)); 39 } 40 printf("終了しますか? "); 41 scanf("%d",&n); 42 if(n==1){ 43 break; 44 } 45 } 46 return 0; 47} 48
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/23 09:55
2020/06/23 09:59
2020/06/23 10:14