トップページ⇒tech
402コメント176KB

   最速の素数判定アルゴリズム  

■ このスレッドは過去ログ倉庫に格納されています
0001 刺身定食NGNG
最速のアルゴリズムはRabinの定理を使ったものと聞き、
文献を読んでみたのですが、サッパリわかりません。
日本で完璧に理解している方、たまたまこのスレ
見ていたら、ついでに教えてください。
マジです。
0002デフォルトの名無しさんNGNG
>>1
理解できないのならあきらめるしかないでしょう。
他人をたよるのはよくありません。
0003デフォルトの名無しさんNGNG
>>1
その「さっぱり」って言葉がやるきねぇなぁと他人に感じさせるので、
そういう聞き方では知識ナルシスト以外教えてくれないと思われ。
0004デフォルトの名無しさんNGNG
エラストテネスの篩で我慢しろ。
0005デフォルトの名無しさんNGNG
素数なんて、計算するものじゃなくて
データとして保持しておくものだよ。
32bit整数MAXまでの素数リストがあれば実用上何も問題なし。

http://arch.arch.kumamoto-u.ac.jp/hagane/yamanari/joho2/kougi3.html

http://www.hotwired.co.jp/news/news/technology/story/2234.html
0006デフォルトの名無しさんNGNG
>>5
神父もびっくりだな
0007デフォルトの名無しさんNGNG
下のほうは興味あるなぁ。
日本のチームはあるの?
京都産業大学なんか大学でチームつくってそうだな。
0008デフォルトの名無しさんNGNG
100万桁の
100万って、どのくらいなんだ?

100万文字ってなんKB?
0009デフォルトの名無しさんNGNG
百万桁と百万文字は違うだろ
0010デフォルトの名無しさんNGNG
>>8
BCDで持つとして、100万桁=50万バイト=5000キロバイト=5メガバイト
0011特殊早大生理論(広末涼子)NGNG
量子コンピュータを作って計算させる
0012デフォルトの名無しさんNGNG
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991992977&ls=50
0013頭プアーNGNG
素数ってなァに?
0014デフォルトの名無しさんNGNG
>>13
整数環の素元のこと
0015デフォルトの名無しさんNGNG
いや、Delで文字列を数値演算として
扱えるユニットがあるので
それで扱える桁数かな、とオモタわけ。

5MB程度ならいけるな、100万桁....

ところで素数って正の数かしら?
0016 刺身定食NGNG
素数判定が速いソフトってないかな。
0017デフォルトの名無しさんNGNG
だから、、、素数のリストを内部的に保持しておいて
そのリストと照らし合わせる判定方法にすれば
それこそ速い遅いの問題ではないっていってるんだが?

通じないか?
0018デフォルトの名無しさんNGNG
>17
リストってお前、500bitとか1000bitとかの素数まで全部保持するつもりか?
0019デフォルトの名無しさんNGNG
>>18
>32bit整数MAXまでの素数リストがあれば実用上何も問題なし。
って言ってんだろ?
0020デフォルトのやる気なしNGNG
>>11
HNにちょっとだけワラタ。 (^◇^;
0021デフォルトの名無しさんNGNG
>>18 の頭は、>>5 に影響されて、どっかに飛んでいきました。
0022デフォルトの名無しさんNGNG
技術的に考えたいのなら
メモリ管理とか考える方が先。

エラストテネスで32bitMAXまでの素数リストを作ろうと思っても
メモリがオーバー風呂して出来なかったYO。

あと、何万桁を計算する手法も考えるべき。
32bitとかそういうレベルじゃなく

それでいて素数判定が早いというのには意味があるが
実用的かどうかというと全然実用的じゃないと思う。

学術的には意味はありそうだな。
0023デフォルトの名無しさんNGNG
そもそも、1は
Rabinの定理というものが知りたかったのか...

で、その定理の詳細ページどこかにない?
0024デフォルトの名無しさんNGNG
http://www.hotwired.co.jp/news/news/technology/story/2234.html

これって適当に答え提出して「これは素数だ」って言い張ったらどうなるのだろう?
0025デフォルトの名無しさんNGNG
>23

http://www.em.cache.waseda.ac.jp/research/complexity.html
確率性アルゴリズム

補題3
  n≧2 が素数である必要十分条件は 0<a<n なる任意の a に対して
     a^(n-1) ≡ 1 (mod n) が成り立つことである.
補題4
  n が奇数の合成数ならば,
  次の条件を満たす整数 0<a<n が少なくとも (n-1) / 2 個存在する
    a^(n-1) ≡ 1 (mod n) が成り立たないか,または,
    2i | (n - 1), 1<gcd(a^((n-1)/2i -1), n)<n を満たす整数 i が存在する.

これを使って 適当に乱数で検査して 素数らしさが十分だったら、それで
いいってのが1が欲しい乱数の作成方法でしょ?
0026デフォルトの名無しさんNGNG
まず a ≡ b mod n は C言語風に書けば (a % n == b % n) == True の事

素数が注目されているのは暗号化技術に必要だから、
例えば、公開鍵暗号には2つの素数 p,qが必要。
この素数p,qと別の数 e,dの関係が
e*d=n; n % (p-1)*(q-1) == 1 になるように e,dを見つけて

e と nを公開鍵 dを秘密鍵とする

暗号化は (平文^ e) % n として行い 解読は (暗号文^d) % nとする

この一連の流れが巧くゆくのはそれは p,qが素数だったからだけど
実際に必要なのは e,d,n
逆にこの一連の流れさえ巧くゆくなら p,qが素数であったかかどうか
を問い詰める必要はない。 逆に考えれば、素数らしいp、qさえあ
れば、試してみて復元出来るならそれでいい。

という事で、p,qがホントに素数かどうかより 素数らしい値を手軽に
得られる方法でいいという理屈。
002726NGNG
× e*d=n; n % (p-1)*(q-1) == 1 になるように e,dを見つけて
○ n=p*q; (e*d) % (p-1)*(q-1) == 1
0028デフォルトの名無しさんNGNG
だめだ。
Max32ビットの素数リストすら作れない、
メモリの確保が不可能だ。

37万くらいまでなら泥臭い方法で出来たけど。
10桁ですら、とてもとても。
0029デフォルトの名無しさんNGNG
>>1 の知りたいこととは全く無関係に、やや面白いスレになりつつありますな
0030デフォルトの名無しさんNGNG
9999929/9999931/9999937/9999943/9999971/9999973/9999991/

このあたりまでのリストなら
ならなんとか....
0031デフォルトの名無しさんNGNG
>>28,30さん
エラストネスのふるいを使えばどうでしょうか?
基本的にある数Nが素数かどうかはN^1/2までの約数が無いかを調べればよいので、
N^1/2を超える最小の1からのすべての素数の積(変な日本語ですいません)
までのパターンがあれば、後はNをその積で割った余りを検証すればよいのでは?
1*2*3*5*7*11*13*・・・・・・って計算していって0xFFFFを超えた数を見つければ
良いと思います。
003231NGNG
>エラストネス
エラストテネス?恥ずかしい・・・
003331NGNG
て全然駄目ですねごめんなさい。あげないで
0034デフォルトの名無しさんNGNG
>>26
中途半端な知識だな。
それはRSAな。
○RSA∈公開鍵暗号
×RSA=公開鍵暗号
×RSA∋公開鍵暗号
003554NGNG
RSAは会社名だよ
何の略か忘れたけど・・・
003634NGNG
>>35 (54??)
RSA暗号は発案者三人の頭文字をとっている。
Rivest
Shamir
Adleman
で、こいつらが作った会社の名前もRSAセキュリティ
0037デフォルトの名無しさんNGNG
30だけど
>>31
つかってるよ。

ただ、エラスネスするためには
配列やリストを用意しなければいけないんだけど
Booleanの配列で
32bit個の入れ物をつくっちまうと
メモリオバなのよ。

直接メモリのビットを見ればいいんだけどねえ。
軟弱プログラマだからやり方しらないよ。
0038荒井注NGNG
何だバカヤロー
エラトステネスだバカヤロー
0039デフォルトの名無しさんNGNG
42億まで計算しようと思ったが1億まで計算するのに40分
かかった(PenMMX266)ので途中で断念した。時間かけ
ればできるけど、それでもまだ10桁だよ。100万桁なんて
想像できん。
0040デフォルトの名無しさんNGNG
2chで共同で計算するのもいいかもね。
0041デフォルトの名無しさんNGNG
任意の数を与えると、それが素数かどうかを判断する関数を用意すれば?
0042デフォルトの名無しさんNGNG
>>41
どういうアルゴリズムを使うわけ?
素数の定義からは逃げられないよ。
0043デフォルトの名無しさんNGNG
ルカステストとかラビンの定理とか。
0044デフォルトの名無しさんNGNG
>>39
激しく同意。
0045デフォルトの名無しさんNGNG
100桁の数一つ扱うのにも
めちゃくちゃややこしいし
一つの数が素数か否かを判断するのにも
膨大な時間がかかる。
この部分を分散計算するという考えそのものが思いつきもしない。
ウツニャ
0046デフォルトの名無しさんNGNG
100万桁くらいの+ - * なら ややこしくないだろう。 / % は多少メンドクサイけどね。
 BCDや100進法で 500KByte 掛算時のΣai*biで桁溢れがおきないから大丈夫

でも、素数かどうか判定するのはどうかな?
1の言うRabinの定理で確実に素数らしい奴の予想をつけといて、それを皆で割って
みるしかないとすると、 参加者が何人いてもあんまり助けにならないよね
0047デフォルトの名無しさんNGNG
http://www.hotwired.co.jp/news/news/technology/story/2234.html
>素数とは、1、3、5、7、11、13など、
>1およびその数自体でしか割り切れない数

大学4年生にもなってはじめてしりましたよ。
0048デフォルトの名無しさんNGNG
7時間かかってらあ。
....99999677/99999703/99999721/99999773/99999787/99999821/99999827/99999839/99999847/99999931/99999941/99999959/99999971/99999989/
0049デフォルトの名無しさんNGNG
>>47
重箱隅だが2も素数だよ。
0050デフォルトの名無しさんNGNG
ギコbasicが多桁対応になってるから、これでなんとか出来ないかい?
0051デフォルトの名無しさんNGNG
やるならDelで文字列数値ユニットがある。

で、メモリ直読みでエストラネスをやってみようか。
符号なし32bitMAX程度は出したいですね。
4294967295

でも
符号なし64bitMaxの18446744073709551616
は出来そうにない...
これでも100マソ桁まであと....
0052デフォルトの名無しさんNGNG
気が付いたけど、Windows付属電卓って
すごい桁数扱えるのね。

妙な所を
きっちりと作ってやがんな>>MS
0053デフォルトの名無しさんNGNG
1は素数じゃないのでは・・・。
0054デフォルトの名無しさんNGNG
1は素数じゃないな。。。
0055エラトステネスNGNG
>>4>>22>>32 エラストテネス
>>31 エラストネス
>>37 エラスネス
>>51 エストラネス

荒井注の冥福を祈りつつsage
0056デフォルトの名無しさんNGNG
1は素数だろ。
>>53-54どこみていっているんだ?
005756NGNG
ウソだった。氏ぬ。
0058デフォルトの名無しさんNGNG
素数定理からすると、
10^(10^6)〜(10^(10^6) + 2^24) の範囲には素数がありそうだと思える
これらの全部のフラグをたてといて、
Rabinのアルゴリズムで最後迄残った数個に絞り込むのはそれほど大変じゃない筈

後は、これが素数かどうかを証明する方法だなあ・・・
0059デフォルトの名無しさんNGNG
>>58
1と自分以外で割り切れるかどうか、試せばいいんじゃないの?
0060デフォルトの名無しさんNGNG
>59
いや、あの、それじゃ1命令10GHzで多桁除算が出来たたとしてもさ
 10^(10^6)/10^10 = 10^(10^6-10)秒かかるんだよ

10^(10^6) のオーダだとフルイに使うメモリにしたって
世界中のパソコンのハードディスク足したって足りはしないさ。
006158=60NGNG
正確に書くと 2^24 の範囲には素数は 平均7.3個程度ある筈

それから √n迄でいいから、上の計算よりずっと少なくて
  √(10^(10^6) )/10^10 = 10^(1000-10)=10^990秒でいい
0062デフォルトの名無しさんNGNG
100万=1M桁になると、掛算を筆算方式でしたんじゃ 1回の掛算だけで1時間かかるんじゃないの?

FFT方式だとどれくらい早くなるのかな?
0063デフォルトの名無しさんNGNG
>>60
ハゲしく同意

フルイにかけるメモリ確保すら問題
0064デフォルトの名無しさんNGNG
Shorのアルゴリズムで素因数分解できるかどうかみてみるってのは?
だれか量子コンピュータを作ってよ。
0065デフォルトの名無しさんNGNG
a=を大きな数として b=log(a)程度の数で

for (c=2;c<√(a+b);c++)
{
if(cが素数でないなら)continue;
if( (a+b) % c !=0) goto 素数でない
}
だったらいいんでしょ?

(a+b)%c = (a%c + b%c)%c だよね?
a=1000000! としとけば、100万迄の a%cはゼロだから
計算量は100万分の1になるんじゃないかな?
0066デフォルトの名無しさんNGNG
1000000!がいくらになるか想像つきますか?
0067デフォルトの名無しさんNGNG
ちなみに、スターリングの公式だと、
n! = n^n * e^(-n) * SQRT(2*pi*n) e^(1/(12*n) - 1 / (360 * n^3) + θ/(1260 * n^5))
(0<θ<1)
です。
006865NGNG
その前によく考えたら、100万迄は a%cはゼロだけど 1000000! % 1000001 はもう予測出来ないな
100万分の1じゃなくて100万分の節約ってだけだな
0069非65NGNG
Log[10.0,Gamma[1000000.0]] ≒ 5.57 10^6
Log[2.0,Gamma[1000000.0]] ≒ 1.85 10^7

1000000!は10進数で約557万桁、約1850万ビットの数ですか....
想像つきませんね。
0070デフォルトの名無しさんNGNG
でも課題は、
 100万桁よりも長い最初の素数 5万ドル
 10億桁よりも長い最初の素数に対する最高金額の25万ドル
だからなあ
0071デフォルトの名無しさんNGNG
100万桁はもう出てると思うよ
http://www.eff.org/awards/coop.html

狙うならもう1桁上だね
0072デフォルトの名無しさんNGNG
1000001桁?

求めるならメルセンヌ素数を求めたいね。
007371じゃないけどNGNG
>>72
>>71のリンク先を見る限り
>>71の言う一桁上は
1,000,001でなく
10,000,000ってことかと。
0074デフォルトの名無しさんNGNG
>>73
なんで桁数が10進法で上昇しなければならないんだ?
意味わからん。
007573NGNG
>>74
俺に言われても(^^;
>>71の言い方が悪い…。
0076 1NGNG
レス遅れてすいません。
僕が参考にしていた文献です。
これをもとにして、高速な素数判定ソフトを作りたかったんですが、
無学なもので、内容が理解できませんでした。
そういう悲しい事情です。

【参考文献】
「アルゴリズムの基礎」
五十嵐善英、西谷泰昭 共著
コロナ社
ISBN4-339-02348-5 \3,000

≪8.5 Rabinの素数判定アルゴリズム(P168−170)≫
0077デフォルトの名無しさんNGNG
普通のプログラマとしての意見だけど
32bitのintの最大値
2147483647
は素数なんだけど、これを泥臭く2.3.4....2147483646でわってみる判定方法で
やったとしても今のマシンなら数分(今試したよ)なのだから
高速素数判定ソフトを作っても
何の意味もないような気がする。

32bitや64bitを超えた数値を扱う方法は
アルゴリズム以外の面で実装が大変だ

>>1さんは
その辺りの事、わかってらっしゃいますか?


2147483647までの素数列を全て求めるときの
高速アルゴがあるのなら教えてもらいたい。
アルゴリズムというより
そのデータを保持するメモリ管理の方が知りたいな。
0078デフォルトの名無しさんNGNG
 その高速判定は、あくまでも確率的な判定方法ですよ
 ソースはこれから辿って下さい
http://search.net-newbie.com/php/function.gmp-prob-prime.html
00791NGNG
>>77
 実装が大変なんですか。あまりよくわかっていませんが、
桁が多いと、扱える変数(?)がなくなると言うことですか?
それにともなって、細工が必要になるのかな。素人でスマン。

>2147483647までの素数列を全て求めるときの
>高速アルゴがあるのなら教えてもらいたい。

僕が最初、試したアルゴリズムは、
6n±1(n≧1、nは自然数)を、素数の候補として、
手当たり次第に√(6n±1)に達するまで、

(6n±1)mod(既に得られてる素数)=0

を判定する方法をとったんですが。これってダメ?
でも、これだと、2147483647までできないと思う。
やってみてもいないし。メモリ管理に至っては全然です…
0080デフォルトの名無しさんNGNG
2^23程度なら256M+128Mバイトのメモリを実装すればオンメモリで可能だろう
0081デフォルトの名無しさんNGNG
× 2^23
○ 2^31

それから2^31迄の全ての素数を入れるのに必要なメモリは
およそ 4*( 2^31/ ln(2^31)) だいたい 400Mバイトだから フラグで記録した方が効率がいい
00821NGNG
>>77
>>78

>やったとしても今のマシンなら数分(今試したよ)なのだから
>高速素数判定ソフトを作っても
>何の意味もないような気がする。

>その高速判定は、あくまでも確率的な判定方法ですよ

文献によると、
≪Rabinらはこの方法により、2^p−1なる形の整数が素数であるかどうかの判定を計算機を用いて行った。1<p<500の全ての整数についての判定をたった数分で行い、全ての判定は正しかったと報じている。この方法は素数であるかどうかを判定するどの決定性アルゴリズムより桁違いに速く、サンプル数mを適当な大きさにすることにより、誤りの確率をきわめて低くすることができる。≫

≪例えば、m=50のとき、誤り確率は約千兆分の1となり、基本演算の所要時間が1μsで、3万時間連続稼働している間に1度の割にしか基本演算の誤動作が生じない計算機よりも信頼性が高い判定方法である。≫
とあります。

これ見て、作ってみたいなと思ったわけです。
00831NGNG
>>80、81
アドバイスありがとう。そういう計算方法も知らなかったんです。理系だけど。ちょっとやってみます。
0084デフォルトの名無しさんNGNG
フラグで記録する時は 偶数を記録しないだけで 1/2に さらに3の倍数を記録しないのを追加すれば 2/6
でいいからね
0085デフォルトの名無しさんNGNG
>>82 だから >>25 が書いてるだろ?
>  n が奇数の合成数ならば,
>  次の条件を満たす整数 0<a<n が少なくとも (n-1) / 2 個存在する
>    a^(n-1) ≡ 1 (mod n) が成り立たないか,または,
>   2i | (n - 1), 1<gcd(a^((n-1)/2i -1), n)<n を満たす整数 i が存在する.

X ≡Y mod n は 両辺の nの剰余が等しいという意味。
もしかして gcdという関数が判らないのか?
0086デフォルトの名無しさんNGNG
/* 符号なし 32bit の素数を全て求める(返り値:32bitの素数列へのポインタ(先頭は素数の数)) */
U32* GetSosu(void)
{
  U32  *p;
  int  i, j;
 
  p = malloc(sizeof(*p) * 2);
  p[0] = 1;
  p[1] = 2;
  for(i = 3; i != 1; i += 2){
    /* 素数判定 */
    for(j = 1; (j <= p[0]) && ((i >> 1) > p[j]); j++){
      if(0 != i % p[j])    break;    /* 素数発見 */
    }
    if(j > p[0]){
      /* 新しい素数を追加 */
      p[0]++;
      p = realloc(sizeof(*p) * (p[0] + 1));
      p[p[0]] = i;
    }
  }
 
  return(p);
}

仕事が忙しいから作ってみたよ。
テストはしてないんで、
コンパイルが通るかどうかは知らない。
何とか方とか難しいことは知らない。
っていうか、実は素数の定義自体も自信ない。
速度も別に気にしてない(毎回realloc()とかしてるし)。
あと、メモリ確保できなかった時の対処もしてない。

とりあえず、答えが出るのが何時になるかは知らないが
出せないなんて事は無と思う。
0087デフォルトの名無しさんNGNG
さらに噛み砕いた説明が欲しいなら

http://www.ml-labo.com/download.htm
これはどうだ


アルゴリズム(ラビン法): 予め決められた整数L と判定対象の整数p に対して以下を実行.
p = 素数の候補;
p = 1 + 2 k w を満たす k と w を計算(ただし, w は奇数);
以下を L 回繰り返す {
 1 < a < p なる a をランダムに生成;
 y = a w mod p;
 j = 0;
 while ( ( j < k ) and ( y ≠ 1 ) and ( y ≠ p -1 ) ) {
  y = y 2 mod p ;
  j = j+1;
 };
 if ( ( j = k ) or (( j > 0 ) and ( y = 1 )) ) p は素数でない;
};

途中の whileが gcd だ。 意味が判らなければ gcd とユークリッド で検索してみろ
00881NGNG
>>85
そうなんです。わかりません。gcdという関数の存在も今知りましたが、
それでも、文章の意味が分からないんです。
しかも、どこにツッコミ入れられているかもわからないんです。
つきはなさないで下さいね。
00891NGNG
>>86、87
お忙しい中、ありがとうございます。
力不足ですいません。
時間かかりますけど、やってみます。
0090デフォルトの名無しさんNGNG
>>64
Shorのアルゴリズムも、Rabinと同程度に確率的な判定法でしかないっす。
0091デフォルトの名無しさんNGNG
ルカステストは?
0092デフォルトの名無しさんNGNG
>>90
Shorのアルゴリズムとは
0093デフォルトの名無しさんNGNG
「コンピュータと素因子分解」
和田秀夫 / 遊星社

最新の資料ではないがよくまとまっているし、プログラムコードも入っている。
専門家でなければ必読。
0094デフォルトの名無しさんNGNG
やっぱアルゴリズムとかコアな本は外人が書いたやつに限るね。
日本の東北大の教授とかが書いたやつなんてコードに無駄なとこ多くて読む気がうせる
0095デフォルトの名無しさんNGNG
>>50
これだね
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/mformula.txt

モジュラベキとかgcdとか関数を増やしてけば使えるかも・・・でも
既に1000桁扱える10進basicとかあるからなあ

アドバンテージはメモリがある限り桁数増やせる点だけど、今のアルゴリズム
じゃ掛算が遅くてダメだな
0096デフォルトの名無しさんNGNG
>>92
おおざっぱに書くと

1.Nを素因数分解したいとする。
----- 因数が見つかるまで2〜5を繰り返す ------
2.Nと互いに素で x<N な x を取ってくる
3.x^r == 1 (mod N) になる最小の自然数 r を計算
4.rが偶数になる確率は1/2程度。
5.rが偶数の時 gcd( N, x^(r/2)±1 ) のどっちかが、1やNでないNの約数を与える確率も1/2程度。
-------------------------------------------

ステップ3.を計算するのは量子コンピュータじゃないと死ねるので結局まだ実現不可だけど。
0097デフォルトの名無しさんNGNG
>95 今のままだと
 掛算で 10進 40万桁超で正しい答えが得られない筈
 掛算途中の桁あげを処理しないといけない
 でもこの修正をやっても実際は遅くて使い物にならないから意味ないけどね
function s100Mul(const a,b:s100):s100;
var i,ia,iaL,iaH:integer;
var cy,ecy:integer;
begin
 SetLength(Result,Length(a)+Length(b));
 cy:=0;
 for i:=0 to High(Result) do
 begin
   iaL:=Max( 0,i-High(b));
   iaH:=Min(High(a),i );
   ecy:=0;
   for ia:= iaL to iaH do
   begin
    cy:=cy+a[ia]*b[i-ia];
    if cy>100000 then
     begin
     cy :=cy-100000;
     ecy:=ecy +1000;
    end;
   end;
   Result[i]:=(100+(cy mod 100)) mod 100;
   cy:=ecy+(cy-Result[i]) div 100;
  end;
  s100CyNorm(Result,cy);
end;
0098デフォルトの名無しさんNGNG
複雑な事はわからないですが

2.3.5.7.9.
10を調べると2で割れるから素数ではなく
11を調べるとこれまでリストした全ての素数のうち
11/2=5以下のもので割り切れないから素数

2.3.5.7.9.11.
12を調べると2で割れるから素数ではなく
13を調べるとすべての素数で割り切れないから素数

2.3.5.7.9.11.13.
14を調べると2で割り切れるから
15を...3で割り切れる
16を...2で割り切れる
17を...これまでリストした全ての素数のうち
17/2=8以下のもので割り切れないから素数

2.3.5.7.9.11.13.17

とやっていくと
計算量が減り、まあまあ高速に素数リストが出来て
メモリのことも考慮しなくていいようになるかも。

ダメ?
0099デフォルトの名無しさんNGNG
ガイシュツだっけ?

ここは!!!
http://www.ie.u-ryukyu.ac.jp/ie/mirror/www.iip.ie.u-ryukyu.ac.jp/yuu/c_html/sosuu.html
010099NGNG
>>48の方がよっぽど上だった,,,
0101デフォルトの名無しさんNGNG
>>98
それより計算量が多かったり低速だったりする方法って思いつかないぞ。(w

√N を計算するより N/2 以下の素数全部で割ってみる方がマシってこと?
■ このスレッドは過去ログ倉庫に格納されています