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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

1404閲覧

最大公約数が変な値になる

series207

総合スコア49

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/01/20 04:12

編集2020/01/20 04:14

#実現・解決したいこと
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14119893589
に投稿されている素因数分解を用いて最小公倍数と最大公約数を求めるプログラムをコピペして実行したのですが、最大公約数の値がおかしなものになっているのですがこれを最大公約数の値を表示するようにするにはどうすればいいですか?
#該当のソースコード

C

1#include<stdio.h> 2 3int main(void) 4{ 5 int i, j, k[2], n[2], a, b, c[2][100]; 6 7 printf("a="); 8 scanf("%d", &a); 9 printf("b="); 10 scanf("%d", &b); 11 12 n[0] = a; 13 n[1] = b; 14 15 for (i = 0;i<2;i++) { 16 k[i] = 0; 17 while (1) { 18 j = 2; 19 while (1) { 20 if (n[i] % j == 0) { 21 c[i][k[i]] = j; 22 k[i]++; 23 n[i] /= j; 24 break; 25 } 26 else j++; 27 } 28 if (n[i] == 1)break; 29 } 30 } 31 32 for (i = 0;i<2;i++) { 33 if (i == 0)printf("a="); 34 else printf("b="); 35 printf("%d", c[i][0]); 36 for (j = 1;j<k[i];j++)printf(",%d", c[i][j]); 37 printf("\n"); 38 } 39 40 for (i = k[0];i>-1;i--) { 41 for (j = k[1];j>-1;j--) { 42 if (c[0][i] == c[1][j]) { 43 printf("最小公倍数=%d\n", a*b / c[0][i]); 44 printf("最大公約数=%d\n", c[0][i]); 45 return 0; 46 } 47 } 48 } 49 50 printf("最小公倍数=%d\n", a*b); 51 printf("最大公約数なし\n"); 52 53 return 0; 54} 55

#実行結果
イメージ説明

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

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

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

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

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

guest

回答3

0

素因数分解を用いて最小公倍数と最大公約数を求めるプログラム

このやり方をすること自体が、かなり効率が悪いです。最大公約数はユークリッドの互除法を使って求めて、あとは掛け算とわり算だけで最小公倍数を出せます。

あと、正の整数同士が最大公約数なしにはなりません。最大公約数1になることはあります。

投稿2020/01/20 04:28

maisumakun

総合スコア145183

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

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

series207

2020/01/20 08:51

ご回答ありがとうございます。
guest

0

そのような値は, 配列の(「有効なデータ」の範囲)外にアクセスしている場合が多いです.
ループによる配列のアクセスで添字が範囲内にあるか確認しては如何でしょうか.

投稿2020/01/20 04:48

jimbe

総合スコア12632

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

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

series207

2020/01/20 08:51

ご回答ありがとうございます。確認してみます。
guest

0

ベストアンサー

VisualStudioでやってるなら、コードの任意の行でブレークポイントを設定すればそこで実行を止めることができます。そして、その時点の変数のナカミを参照できます。
そうやって、そこからまた1行づつ実行して、変数を参照できますんで、そうやってどの時点で変数の値がおかしくなるかとか調べていきましょう。

そうやって行き、どこで値がおかしくなるかというのを特定できるようにすれば、解決も早くなると思います。

投稿2020/01/20 04:20

y_waiwai

総合スコア87749

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

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

series207

2020/01/20 04:27

ご回答ありがとうございます。その方法でためしてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問