素数 "列挙" アルゴリズムを極めるスレ
■ このスレッドは過去ログ倉庫に格納されています
00011
NGNG既存のソフトも参考に挙げるべきか?
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG挙げるべきかじゃねーよ
スレ立てるなら参考ページからソフト、
関連技術などのリンクそろえておけ
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG既存スレ
最速の素数判定アルゴリズム
http://pc.2ch.net/test/read.cgi/tech/993457354/
まだ使えるから そっちでやってよ
00061
NGNGどっちでもないです。
>>3
申し訳なかったです。
ttp://www.google.co.jp/search?q=cache:FrIagBROO3QC:lt.sakura.ne.jp/~ryuca/pro/sosu/sosu.html+%91f%90%94+%83A%83%8B%83S%83%8A%83Y%83%80&hl=ja&start=8
↑キャッシュのみ生存
ttp://www.gt.sakura.ne.jp/~nyagy/integer/sosuu.html
素数算出系ソフト
http://www.lycos.co.jp/cgi-bin/pursuit?query=%91f%90%94&cat=jpdownload&maxhits=17&qs=gt|rate,gt|nflg
00071
NGNG判定と列挙は微妙に違います。向こうで書くと微妙にスレ違いになりそうだったので。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGそこのリンク、ものすごく低レベルなんだが、
もしかして10桁とか20桁とかそういうものすごい低レベルな話?
数百万桁クラスの素数って事じゃないのか?
メモリ使用量も考慮してとかあるし。
リンクを見る限り、1自体がこの話題についてこれる気配がしないんだが
00101
NGNGそのとおりです。凄く低レベルです。
数百万桁クラスの素数を列挙する方法があるんですか?
0011デフォルトの名無しさん
NGNG作ったこともない奴が作った奴を批判する資格はない。
0012デフォルトの名無しさん
NGNG列挙できるのは64bitでも限界に近いよ
0014デフォルトの名無しさん
NGNGどうせなら100桁(40バイト)くらいの素数を与えてそこから素数を列挙するとか
0015デフォルトの名無しさん
NGNG64bit限界はエラトステネスのふるいを使った場合
00161
NGNG100桁の素数辞書のサイズが莫迦にならないと思うんですが…
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGまさか確率判定法でフルイを粗くさばく?
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGn0 := 170141183460469231731687303715884105727
n0 〜 n0+0xffff の範囲の素数を列挙せよ
0024デフォルトの名無しさん
NGNG2^127-1 = 170141183460469231731687303715884105727
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNGてめえらここにソース出してみろ
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGオマエモナーって言ってほしい?
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGそれが可能なら現在のネットワーク社会が
おそらく崩壊するのだが…
0032デフォルトの名無しさん
NGNGなどと間口を広げてみるテスト。
0033房
NGNG0034房
NGNG電子フロンティア財団(EFF)が、今までで最も大きな素数の発見に対して、最大25万ドルを提供しようとしている。
問題は、誰も1人では賞金をもらうことはできないだろうということだ。
この賞金を得られるほど大きな素数を発見するには、世界最速のスーパーコンピューターでも6万2000年かかると考えられている。
こんなことがあったYO
2chのみんなで25万�j山分けシマッショイ!
0035デフォルトの名無しさん
NGNG最速の素数判定アルゴリズム
http://pc.2ch.net/test/read.cgi/tech/993457354/
ここはちょっと違うよー
0036デフォルトの名無しさん
NGNGプログラムの練習で書くような場合。
0037デフォルトの名無しさん
NGNGいいんじゃない? てか俺それ以外に思いつかない。
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGもちっと詳しく説明きぼんぬ。
0040デフォルトの名無しさん
NGNGextern "C"{
int printf(const char*,...);
long atoi(const char*);
}
main(int c,char *v[]){
unsigned long m,q,r;
if(1<c){
m=atoi(v[1]);
char*P=new char[m];
for(q=3;q*q<m;q+=2){
if(P[q]!=1){
for(r=q*q;r<m;r+=q+q)
P[r]=1;
}
}
printf("2\n");
for(q=3;q<m;q+=2){
if(P[q]!=1)
printf("%u\n",q);
}
}
return 0;
}
これどうよ?
もっと短くできっか?
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG> もっと短くできっか?
速度を気にしないならこんなのが7行スレにあったが。
#include <iostream.h>
int main(){for(int z,i=1;z=++i;){while(i%--z);if(z==1)cout<<i<<",";}return 0;}
0043デフォルトの名無しさん
NGNGそれ最短極めたと思う。クソ遅いけどw
てわけで最短はこれでケテーイ?
0044昔それ>>42書いた人
NGNGつーかスレ違い。
>>36,38
2から順に全部探してく方法だと、それが最速じゃないかな。
もっと条件を課してくと別のアルゴリズムがあるかもしれない。
俺はよく知らんけど…。
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNGに63bit以下の素数全部載ってるよ
0047デフォルトの名無しさん
NGNG検索中のページは、削除された、名前が変更された、または現在利用できない可能性があります。
0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNGつまんね
0051クレジャパン
NGNG0052ヽ(´ー`)ノ
NGNG0054デフォルトの名無しさん
NGNG速くするんだったらforループをq+=10とかにして
1の位が1、3、7、9のものだけ調べるとかじゃだめ?
難しいことわかんないけど。
0055デフォルトの名無しさん
NGNGちょっとやってみよう
0056デフォルトの名無しさん
NGNGやってみようと言ったものの実行する前にふと気づく。
if(P[q]!=1){
で判定するから速さはあんまり変わらない気がする。
0057デフォルトの名無しさん
NGNGそれから、そのコードでは32bitフルに素数を列挙出来ない。
列挙するにはビットマップでフラグを持ち
さらに 2と3の倍数を最初から除くようにする。
http://pc.2ch.net/test/read.cgi/tech/993457354/128
0058デフォルトの名無しさん
NGNGあっそうか!
自分が前に作ったのは小さい素数から順にファイルに保存してくやつだったから。。。
エラトステネス使ってたら意味ないか。。。
0060デフォルトの名無しさん
NGNG最速の素数判定アルゴリズム
http://pc.2ch.net/test/read.cgi/tech/993457354/
のスレで既に話が出てると思うが、素数を保存する方法としても
整数として値保存するより、フルイをビットマップで保存する方が効率が良い
0061デフォルトの名無しさん
NGNGC初心者なのでソースが読めません…
0063デフォルトの名無しさん
NGNG実は>>40書いたの俺なんです…
0064デフォルトの名無しさん
NGNG除く処理がちと面倒…かな?
0065デフォルトの名無しさん
NGNG6の倍数に1足したら素数確定ですか?
0066デフォルトの名無しさん
NGNG25=6*4+1
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGttp://f1.aaacafe.ne.jp/~pointc/log59.html
セコイのでsage
0069デフォルトの名無しさん
NGNGそのテーブルを作るプログラムを考えねば話にならんな。
ネタ募集あげ
0070デフォルトの名無しさん
NGNGprimes = sieve [2.. ] where
sieve (p:x) = p : sieve [ n | n <- x, n `mod` p > 0 ]
だな。
0071デフォルトの名無しさん
NGNG「なんでもあり」なのに is_prime 使ってるのはなんでだろう?
while(n=next_prime()){
〜
}
------
unsigned long next_prime()
{
static const unsigned long *ptr = prime_table;
return *ptr++;
}
でよくね?
0072デフォルトの名無しさん
NGNG小さい数字まで求めたいとき、プログラムのロード時間の方が大きくなって…
0073Delフサギコ ◆zE1iiRdQ
NGNG∧,,∧ ∬ /フォルダわけて分割したテキストファイルを
ミ,,゚Д゚ノ,っ━~ < 読み込んだ方がいいよ。
_と~,,, ~,,,ノ_. ∀ \_________
.ミ,,,/~), .| ┷┳━
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃ どこまでか知らんが
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻ 素数列を32bitIntegerMaxまで持ったら256MBとか512MB
程度のメモリが必要だったんじゃなかったかな。
0074デフォルトの名無しさん
NGNGということは、100Mオーバーのアプリになるのか イヤン
0075デフォルトの名無しさん
NGNG2^32/ln(2^32) *4 -> 780MByte程
2^31/ln(2^31) *4 -> 400MByte
0076デフォルトの名無しさん
NGNG2と3以外の素数はすべて6n±1に現れる。
0077デフォルトの名無しさん
NGNGここでも素数バトルやってるみたい
ttp://haya.s5.xrea.com/cgi-bin/petit/petit.cgi
0078デフォルトの名無しさん
NGNGうん。
2以外の素数はすべて2n+1に現れる。
2と3以外の素数はすべて6n±1に現れる。
そして2と3と5以外の素数はすべて30n±1, 30n±7, 30n±11, 30n±13,
30n±17, 30n±19, 30n±23に現れる。
だから?
0079デフォルトの名無しさん
NGNG何を勝ち誇ったように…
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG170141183460469231731687303715884105757 = n0 + 30
170141183460469231731687303715884105773 = n0 + 46
170141183460469231731687303715884105793 = n0 + 66
170141183460469231731687303715884105829 = n0 + 102
170141183460469231731687303715884105851 = n0 + 124
170141183460469231731687303715884105979 = n0 + 252
170141183460469231731687303715884106001 = n0 + 274
あといくつぐらいだろ。この割だと、1500こ前後だと思うけど。。。
0083デフォルトの名無しさん
NGNG170141183460469231731687303715884105727 = n0 + 0
忘れてた。
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGそれ、試行的除算法ですか?
0086デフォルトの名無しさん
NGNGそれだと 41 43 47 53 が重なる。
60n-30±x にして x=29 を追加。
0087デフォルトの名無しさん
NGNGそれでどこが「いいトコついてる」のか教えてくれ。
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNGMiller 法です。
ですから Riemann 仮説が証明されないとこの結果も 100% 正しいとは
いえないのですが、現在のところほぼ間違いないといわれています。
私も証明はできないのですが、原理は簡単ですので、
興味がある方がいれば、原理だけなら、説明します。
さて、この範囲の探索に
pentium!!! 1.26GHz のマシンで4時間ほどかかりました。
結局、全部で 760 個の素数が見付かっています。
最後のは
170141183460469231731687303715884171179 = n0 + 65452
です。
Millwe 法で調べたので、これより多いことは
(私のプログラムミスが無いとすれば)ありません。
逆は Riemann 仮説が証明されるかにかかっています。
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGRiemann予想(Riemann Hypothesis)のこと?
0092デフォルトの名無しさん
NGNGMiller 法も、多分正確には "Miller-Rabin's Primality Test"
だとおもいます。以下、私の浅い理解レベルで解説してみます。
間違っていたら御指摘ください。
基本的にはフェルマーテストと、sqrt(1) が 1 or -1 である
ことをある範囲の数について確かめるのですが、この範囲が
Riemann Hypothesis が証明さればかなり狭い範囲でよいと言
うことです。
1. フェルマーテスト
フェルマーの小定理は、「p が素数なら、 0 以外のどんな a
についても、a^p \equiv a \pmod p」。(aをp乗してpで割った余り
がaになるってこと。この証明は簡単ですよね。)
さて、この命題の対偶は、(以下、TeXっぽい記号はよみにくいので
プログラム言語っぽく書きます。)
「ある a (!=0) について a^p%p が a でないならば、p は
素数ではない」。
です。そこで、ある数 p についてさまざまな a を持って来て
a^p%p を計算し、一つでも a にならない a があったらその時点で
p が素数ではないことが分かります。
ここで、注意ですが、1 <= a <=p-1 の全ての a について、
a^p%a=a になるのに、p が素数ではない場合があるってことです。
さらに捕捉ですが、a^p%p の計算は a, a^2%p, a^4%p, ... を作り
必要なのを掛け合わせます(%p しながら)。特に a や p が大きい
場合はそうしないと手間が極端に増加します。
0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNGや、実はその分野を勉強した人にとっては初歩の初歩なんよ。
専門分野が違う人に「おれって頭良いでしょ」とかますハッタリとしては
効果的なんだけどさ。
0095デフォルトの名無しさん
NGNG数学科だけかもしれないけど
0096デフォルトの名無しさん
NGNGそうなのか…ちょいと鬱だ
漏れはエラトステネスを2飛ばしでやるのが精一杯だYO...
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG0099Lisp 1.5
NGNGHaskellで書いた素数の無限リストのプログラム。
sieve (p : r) = p : sieve [ n | n <- r; n mod p ~= 0 ]
primes = sieve [2..]
:はconsの生成と分解。引数はパターンマッチング渡しで遅延評価。
一行目は、ZF記法っていう置換公理風のリスト生成。
二行目の[x..]は、[x, x+1, x+2, ...]というリスト生成。
0100デフォルトの名無しさん
NGNG速さはいかほどでしょう?
0101Lisp 1.5
NGNGmodの回数に関するO(n)は普通のエラトステネスの篩と同じです。
-- なこと、いわんでも分かってるか。(しかし何で素数判定法の話に…)
■ このスレッドは過去ログ倉庫に格納されています