Project Eulerを始めてみようと思う
C/C++のスキルアップをしたい
どうも私にはプログラミングスキルが(圧倒的に)足りていないようだ。少し時間を遡るが、緊急事態宣言を受けて少し時間に余裕ができたことから、新しいことにチャレンジしようと思いGEANT4ツールキットを使ったシミュレーションをしようと決意した。
一週間ほどでWindows用の環境構築をしてSampleプログラムを動かしてみるものの、そこから先が続かない。サンプルプログラムを必死に読み解きながら、なんとか自分がシミュレーションしたい体系(DetectorConstruction)を何とか組めても、Scoringの方法が意味分からんし、Rootの使い方意味分からんし、Opticalクラスは意味分からんし、、、、と意味分からんことしか出てこない。ぴえん。
というか、GEANT4以前に、GEANT4が記述されているC++にそもそも馴染みがない。最初はクラスとかオーバーロードとかの概念の全く知らない。今でこそいわゆる入門編のレベルまでの知識は一通り目は通したものの、いかんせん手(キーボード)が動かない。
GEANT4と平行して、C/C++のプログラミングスキルを向上せねばならないと思い一念発起。実は過去にも何度かそのようなタイミングがあり、その都度参考書などを進めようとするが三日坊主で続かなかった。原因は自分の継続力の無さが一番だが、何より参考書や例題が面白くなかった。
そこで今回の標題、Project Euler(プロジェクト・オイラー)という英語のサイトを発見した。まずオイラーというサイト名をつけるあたりのセンスが好き。そして問題が数学をベースとした問題が主であり、まさに私にぴったりだと感じた。だから今日からProject Eulerの問題を少しずつチェレンジしていこうではないかと。
ついでにGEANT4の話題も載せようかと思う。
Project Euler Problem 001 / Mutiples of 3 and 5
Problem 001 / Mutiples of 3 and 5
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
とりあえず問題と自分の回答を最後に載せておきます。
<感想>
久々にVisual Studioを起動した。まずcoutを使うためのiostreamインクルードすらググったというね。先は長い。。。そして書き始めるけど簡単な問題なのにいきなりエラーばっか。まずはエラーが出て解消するという一連の作業にも慣れる必要があるな。最後は正答を送ると、Congratulationのページが出てきて素直に嬉しい。
でも回答を考えているときが一番楽しい。例えば「3と5の倍数判定をこう記述したらいいな」とか思いつく瞬間というのは脳汁プッシャー状態で、ある意味でハイになれるのだと感じる。
<以下、回答>
#include<iostream>
using namespace std;
bool find_multiple(int num);
int main(){
int i = 0;
int sum = 0;
for (i = 0; i < 1000; i++) {
if (find_multiple(i)) {
//cout << i << endl;
sum += i;
}
}
cout << "The sum of all the multiples of 3 or 5 below 1000 is " << "\"" << sum << "\"" << endl;
return 0;
}
//find_multiple number of 3 or 5.
bool find_multiple(int num) {
bool isBool = false;
if (((num % 3)== 0)||*1
return true;
return false;
*1:num % 5)==0