問題1
問題文
10未満の自然数のうち3または5の倍数を並べると, 「3, 5, 6, 9」となる.
そして, それらの合計は23.では, 1000未満の全ての3または5の倍数の合計は?
http://projecteuler.net/index.php?section=problems&id=1
まずは, 安直に解く.
今後, 解法のバージョンを切り替えて実行できるように, main 関数を作ってある.
#include <stdio.h> #include <stdlib.h> int solveVer00(int num1, int num2, int ceiling) { int i; int sum; for (i = 1, sum = 0; i < ceiling; i++) { if (i % num1 == 0 || i % num2 == 0) { sum += i; } } return sum; } int main(int argc, char **argv) { int version; if (argc == 1) { version = 0; } else { version = atoi(argv[1]); } switch (version) { case 0: printf("Solution: %d\n", solveVer00(3, 5, 1000)); break; default: break; } return 0; }
問題文から自然数は0を含まないとなってるみたいなので, for ループは1から始めてみました。まぁ, 0を含めても答えは変わらない訳ではありますが.
改良の方向としては,
- 「1から999までのmの倍数の合計」を計算する関数を作って, (3の倍数の合計)+(5の倍数の合計)-(15の倍数の合計) を計算.
くらいかな?
拡張の方向としては,
- mからnまでのp_1またはp_2または...またはp_nの倍数の合計を計算する関数を書く.
- Haskell で解く. (Haskell の記法は数学に近いので, ソースは綺麗になりそう. )
- これを機会に新しい言語に手を出す.
などなどでしょうか?
さて, 今後の衝動をお楽しみに.