2011年1月28日金曜日

ProjectEulerを斬る!Problem1

このシリーズはProjectEulerの問題をHSPで解いていこうというものです。

では、早速問題を解いていくことにしましょう。

Problem 1
05 October 2001

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.

10未満の数字で3と5の倍数は3,5,6,9です。その総和は23になります。
では1000未満の数字で3と5の倍数の総和は幾つになるでしょう。(日本語訳PNN)




a = 0
repeat 1000
if int(cnt/3)*3==cnt {
a += cnt
}
else {
if int(cnt/5)*5==cnt {
a += cnt
}
}
loop
input a


出力結果:233168

このint(cnt/n)*n==cntというのは、私がN88Basic時代に多用していた技で
intというのはそのカッコで括られた部分の式の値の整数値を返すというもので、
例えばint(5.8)=5となり、int(1.0)=1、int(1.3)=1というふうになります。
��の倍数aというのは、aはnでわると整数値を返すというものなので、
int(a/n)=nとなります。例を挙げるとint(8/2)=int(4)=8/2というものです。

逆に、aがnの倍数でないというのは、int(a/n)≠nということになります。
例を挙げるとint(5/2)=int(2.5)≠5/2ということです。

これを利用してaがn(3,5)の倍数かどうかを見極めているのです。

0 件のコメント:

コメントを投稿