2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

素数プログラム

1 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:20:57.798 ID:JIX5od2P0.net
これ↓も結構いいアルゴだと思ったんだけどエラトステネスの篩には敵わんか?

def sosulist(m):
  def sosulist_(n,ls):
    if n>=m:
      return ls
    else:
      for p in ls:
        if not n%p:
          break
      else:
        ls.append(n)
      return sosulist_(n+1)
  return sosulist_(2,[])

2 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:22:30.117 ID:58IUIhRh0.net
そこそこの精度だけど
エラトステネスのふるいよりも速い
アルゴリズムあるよね

3 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:23:38.685 ID:JIX5od2P0.net
そうなのか
そこら辺詳しくないわ

4 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:24:59.585 ID:58IUIhRh0.net
高校数学の美しい物語でも紹介されてた気がする

5 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:26:30.525 ID:JIX5od2P0.net
それなら読んだことあるかも知れない
まぁ俺はそんなに大きい素数は必要ないしな…

6 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:27:35.887 ID:BgenxLJc0.net
そのプログラムもエラトステネスのふるいになってない?
平方根までのチェックのが早いだろうけど

7 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:32:54.736 ID:JIX5od2P0.net
>>6
そうなのかな?
素数のリストを作っていって、今まで出た素数で割れないものを新たに素数リストに加えるって感じだけど
エラトステネスの篩はとにかく倍数を消してく感じだよね

8 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:46:28.579 ID:iRvq4w8N0.net
>>7
「消す」の代わりに「わざわざ毎回計算する」ってだけで、やってることは同じだろ

9 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:48:11.179 ID:JIX5od2P0.net
そうだろうか…
計算量は同じ?

10 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:50:54.058 ID:iRvq4w8N0.net
計算量自体は同じじゃね?
ただし、エラトステネスは目標となる数までのテーブルを一気に確保するのに対して、
>>1の場合は動的確保により要素数を増やし続けるから、
その分のコストが差として出る

11 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:52:18.932 ID:BgenxLJc0.net
計算量は同じO(n^2)だと思う
ミラーラビンは
確率4の-k乗の精度でO(k*log3 n)らしい

12 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:55:44.968 ID:JIX5od2P0.net
ふむ…そうかも
調べたらエラトステネスの篩の計算量はO(nloglogn)らしい
>>1も同じかなぁ

13 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 17:59:53.693 ID:BgenxLJc0.net
素数の頻度はloglognに近似するのか

14 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:01:54.324 ID:JIX5od2P0.net
https://mathtrain.jp/eratosthenes

これを読む限り、mまでの素数を求める計算量は

エラトステネス=Σ[p<√m](m/p)
>>1=Σ[k=2,m]Σ[p<√k]1

という感じだな

15 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:02:44.692 ID:JIX5od2P0.net
>>1ではルート使ってなかったけど使ったものと想定してくれ

16 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:04:49.203 ID:BgenxLJc0.net
ああ頻度が近似するんじゃなくてルート使うからかそうだな

17 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:08:25.864 ID:mZ33aBbi0.net
割り算自体は掛け算より遅いし
ループ上限は平方根で十分

エラトステネスの方が速いだろうな

18 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:08:31.737 ID:JIX5od2P0.net
うむ

19 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:11:17.237 ID:JIX5od2P0.net
「素数定理」によればn以下の素数の個数はn/lognで近似できるらしいから

>>1の計算量
=Σ[k=2,m]Σ[p<√k]1
=Σ[k=2,m]2√k/logk
=

わからん

20 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:13:08.409 ID:58IUIhRh0.net
>>5
サイトの方な

21 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:16:28.284 ID:JIX5od2P0.net
>>20
俺はサイトしか見てないから恐らく大丈夫だ

22 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:16:47.280 ID:JIX5od2P0.net
まぁいいや
お前ら付き合ってくれてありがと

23 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:19:47.335 ID:mZ33aBbi0.net
動的に上限を増やすなら
回転ふるいを応用すれば
それなりの速度を保ちつつメモリ使用量を抑えられるかもね

確定探索の話ね。
勿論確率的探索なら話は違う

24 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:21:36.601 ID:JIX5od2P0.net
よく分からんけどthx

25 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:29:42.509 ID:mZ33aBbi0.net
長さ6の回転ふるいを使う場合

6以上の素数は全て、6n+1と6n+5の形になるから
この形の数のみを判定すれば良い

メモリに合わせてこの回転ふるいを
大きくする、的な話

サイズは小さい素数全ての積ね
6,30,210.…

26 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 18:43:09.869 ID:JIX5od2P0.net
なるほど、分かりやすい

27 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 19:17:20.459 ID:BgenxLJc0.net
わかりやすい

28 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 19:21:58.229 ID:/7sq4KMF0.net
改良は可能だけど基本的にはエラトステネスの篩の計算量O(nloglogn)が最速

29 :以下、?ちゃんねるからVIPがお送りします:2020/10/27(火) 19:49:46.744 ID:mZ33aBbi0.net
一応、アトキンの方が理論上は速いらしいが
実装してエラトステネスと差が出るのは
かなり大きな数になるらしい

総レス数 29
7 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★