質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

4回答

420閲覧

c言語でユーグリッドの互除法

ryu72639

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/06/29 15:15

ユーグリッドの互除法を用いて、最大値を求めるときってなぜ以下の関数だとダメな時が生じて来るのですか? 

c

1int yugurid(int number1, int number2) /*ユーグリッドの互除法による最大公約数*/ 2{ 3 int r, a, b; 4 5 if (number1 < number2){ 6 a = number1; 7 b = number2; 8 } 9 else { 10 a = number2; 11 b = number1; 12 } 13 14 r = b % a; 15 16 while (r != 0) 17 { 18 a = b; 19 a = r; 20 r = b % a; 21 } 22 return a; /* a = 最大公約数 */ 23}```

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

プログラムの間違いは他者の指摘の通り。

再帰だと簡単に書けます。以下動作未確認

C

1unsigned int gcd(unsigned int large, unsigned int small) 2{ 3 return large % small ? gcd(small, large % small) : small; 4}

投稿2020/05/20 15:18

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは
結論から言うと a = b; ではなくb = a;です。
これで正常に動くと思います。

その他気になった点

1.引数number1, number2をわざわざa,bに代入しなおすのは少々無駄だと思います。
最初から引数をa,bにすればいいと思います。

2.number1,number2の大小を判定してそれぞれの場合に応じてa,bに代入していますが、
実はユークリッドの互除法において割る数、割られる数の大小関係は答えに影響しません。
例えば、75と625の最大公約数を求めるときa = 75, b = 625とすると、

75 = 625 * 0 + 75
625 = 75 * 8 + 25
...

のように二回目で75と625の場所が入れ替わります。

以下、私が書いたソースコードを載せておきます。

C#

1int yugurid(int a,int b) 2{ 3 int r; 4 r = b % a; 5 while(r != 0){ 6 b = a; 7 a = r; 8 r = b % a; 9 } 10 return a; 11}

投稿2018/06/30 13:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1.let say no = 15, no_ 2 = 17,
if(15 < 17)
a = 15;
b = 17;
return 15;
2. let say no 200, no2 = 19
if(200 < 19)
a = 19;
b = 200;
r = 200 % 19 = 10;
a = 10;
r = 200 % 10 = 0;
return 10;
i think else part return number in between no, n02 ,
return (a < r) ? a : r;
and always return minimum

投稿2018/06/29 16:43

編集2018/06/29 16:47
AliHassan

総合スコア351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

a=b
の部分これでいいのですか?

投稿2018/06/29 15:38

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問