問題: 2520 は、1 から 10 までの各数字で割り切れる最小の数です。
1 から 20 までのすべての数で割り切れる最小の正の数は?
そこで、プロジェクト euler で演習 5 を実行しようとして、次のコードを作成しました。
#include <stdio.h>
#define TRUE 1
#define FALSE 0
int main () {
int n, fnd = FALSE, count, i;
for (i = 1; fnd == FALSE; i++) {
count = 0;
for (n = 1; n <= 20; n++) {
count += i % n;
}
printf ("testing %d, count was: %d\n", i, count);
if (count == 0) {
fnd = TRUE;
printf ("%d\n", i);
}
}
return 0;
}
私のアプローチは正しいと信じています。1 から 20 で割り切れる数を確実に見つけることができます。私のアプローチは正しいですか?はいの場合、それを行う別の方法はありますか?これを解決する別の方法は考えられません。ヒントをいただければ幸いです。前もって感謝します。
編集:皆さんからのアドバイスに基づいて、私はそれを理解しました、どうもありがとうございました!したがって、これは依然として強引ですが、最後の数値に 1 を追加する代わりに、1 から 10 の最小公倍数である 2520 を追加します。したがって、2520 の倍数の剰余の合計を 11 から20 は 0 でした。2520 は既に 1 から 10 で割り切れるので、11 から 20 で割るだけで済みました。
#include <stdio.h>
#define TRUE 1
#define FALSE 0
int main () {
int n, fnd = FALSE, count, i;
for (i = 2520; fnd == FALSE; i = i + 2520) {
count = 0;
for (n = 11; n <= 20; n++) {
count += i % n;
}
printf ("testing %d, count was: %d\n", i, count);
if (count == 0 && i != 0) {
fnd = TRUE;
printf ("%d\n", i);
}
}
return 0;
}
どうもありがとうございます。あなたの助けなしには解決できません :) PS: 10 秒未満で計算できるようになりました。