2017年11月18日土曜日

Project Euler 第10問

Q.
10以下の素数の和は 2 + 3 + 5 + 7 = 17 である.

200万以下の全ての素数の和を求めよ.

A.
以前作成した素数のジェネレータを使えば簡単。
(第7問を参照)

答えは 142913828922
プログラムは

prime = Enumerator.new do |p|
p<<2
p<<3
primes = [2,3]
#次の素数の候補 n
n = 5
loop do
isprime = true
for i in 1...primes.size()
break if primes[i] * primes[i] > n
if n % primes[i] == 0
isprime = false
break
end
end
if isprime
p << n
primes.push(n)
end
n += 2
end
end

summary=0
while (adder=prime.next ) < 2000000
summary += adder
end
puts summary
下の合計を求める部分をprime.select{|p| p<2000000}.inject(:+)としたら
無限ループ化したみたい。 うーんarrayじゃないからか?

0 件のコメント:

dosvaxj3が更新されていた。

 最近、エミュレータ系をあまり触っていなかったのだけど久しぶりに見てみたらタイトルのようにdosvaxj3が更新されていた。 on emulatorでセルフにcなどのソースを書いて実行するのに母艦側の特定のフォルダをドライブとしてマウント出来たり普通に母艦のimeで漢字が入力でき...