####知りたいこと
自分では全く思いつかなかったこのアルゴリズム?ぽいものが何なのか分かりません。
例えば◯◯の法則だよなど名前があるものだと調べてみたいと思います。
この法則が何かご存知の方いらっしゃればご教示ください。
####試したこと
ProjectEuler Problem10 Summation of primes
上記素数判定の問題をPythonで書くとプログラムが遅かったのであれこれ試行錯誤していました。
以前javaでは0.2秒程で動いていたコードを引っ張り出してPythonに書き直したり別の方法を試したりして約9秒掛かっていたものを3秒切れるくらいにまでは改善出来たのですがそれ以上は速くなりません。
Pythonって遅いらしいとも聞くしこんなものなのかなと思いつつ・・・
ネットからヒントを得ようと探していると次のコードの中にアルゴリズム?ぽいものを見つけました。
コピペして実際に動かすと僅か0.2秒程で200万以下の素数の和を出力したので驚きました。
アルゴリズム?凄い!
素数 2乗 等差 アルゴリズムなどで検索してみましたが見つけられませんでした。
(見逃してるかもしれませんが)
####アルゴリズム?
自分の言葉で解釈した法則?:素数の2乗に素数の2倍の公差を持つ等差数列を足したものは素数では無い?
(数学もアルゴリズムも素人なので用語の使い方など間違っていたらすみません)
例えば素数p=3とした時pp:33=9 p2:32=6 9+6=15, 9+12=21, 9+18=27, ...
9,15,21,27,...は素数では無い?
コード抜粋
python
1for i in range(p * p, below, p * 2): 2 sieve[i] = False
コード全体(コピペ+計測用の追記)
python
1below = 2000000 2def find_prime_numbers_below(below): 3 total = 2 4 sieve = [True] * below 5 for p in range(3, below, 2): 6 if sieve[p]: 7 total += p 8 for i in range(p * p, below, p * 2): 9 sieve[i] = False 10 11 return total 12 13#計測用に追記 14import timeit 15print(timeit.timeit(lambda: print(find_prime_numbers_below(below)), number = 1)) 16 17#出力結果 18#142913828922 19#0.200956025

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/07 02:15
2018/10/07 02:22
2018/10/07 02:33