[解決済み] プロジェクト・オイラー5
2022-02-09 11:36:38
質問
2520は、1から10までの各数字で余すことなく割り切れる最小の数である。
1から20までのすべての数で均等に割り切れる最小の正の数は何でしょう?
私の解答です。
#include<stdio.h>
int gcd(int m, int n);
int lcm(int a, int b);
int main()
{
int x=1, i;
for(i=1; i<20; i++)
{
x=lcm(x, i+1);
}
printf("The answer is:\t%d", x);
return 0;
}
int gcd(int m, int n)
{
while(m!=n)
{
if(m>n)
m=m-n;
else
n=n-m;
}
return m;
}
int lcm(int a, int b)
{
return ((a*b)/gcd(a, b));
}
どこが間違っているのか、教えてください。実行すると空白の画面しか表示されません。
どうすればいいですか?
この演習から学ぶべき教訓が1つだけあるとすれば、それはこれです。 掛け算と割り算の順番は重要です。 .
数学では問題にならなくても、プログラムでは問題になることがよくあります。例えば、数学の世界では
(a*b)/gcd(a, b)
と
a/gcd(a, b)*b
あなたのプログラムでは、それが合格と不合格の違いになるのです。
(追記) もちろん、ロジックのバグも修正する必要があります。
x
をlcmで割ったもの)。
EDIT
なぜここで順序が違いを生むのかを理解するために、計算を考えてみましょう。
lcm
の
232792560
と
20
.
232792560
で割り切れる。
20
であるので、それは
lcm
. ただし、計算するときは
232792560*20
で割ると、オーバーフローが発生します。
20
が得られません。
232792560
を返します。
であるため、除数は
gcd(a,b)
から割り出すことができます。
a
を掛ける前に
b
のように、整数の除算で結果を切り捨てることなく、計算することができます。経験豊富なプログラマーが何気なく使っているこの小さなトリックが、デバッグの時間を短縮してくれるのです。
関連
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】strcmpが機能しない
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】C言語のフォーマット文字列でデータ引数が使用されない [重複]。
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み] Project Eulerとの速度比較。CとPythonとErlangとHaskellの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。
-
[解決済み】シンプルなC言語のscanfが機能しない?重複