ふるいがけ考察 投稿者:nohara 投稿日:2004/08/01(Sun) 01:25 No.159 | |
|
私も勉強不足のところがありありなのですが、 47*2^n+1の216091さんへの返答も兼ねて別の トピックを作成します。
216091さん wrote at 47*2^n+1 最大の素数がGFN素数でなくて Mersenne素数 なのは単に探しているパソコンの数がMersenne素数の方が 多いからだと思うからです。
この点、全くの同感です。私もGFN素数は最も捜索効率の よい形式と思っています。私が円分数というタイトルで 直接素数とは関係なさそうな話題をわざわざ書いたのは このことに気が付いて欲しかったためです。 メルセンヌ数も一般フェルマー数も円分数であるという特質上、 約数の形式は似ていますが、一般フェルマー数はbをいろいろ 変えられるので、ふるいを用いることができる分、有利です。
ただし、一般フェルマー数のふるいはNewPGenで対応している k*b^n+1/-1という形式の場合と比較して不利な点があります。 それは約数の存在に周期性が存在しない、ということです。
メルセンヌ数や一般フェルマー数は特殊な形式の数しか 素因数になりえません。これは素数候補を絞り込む上では 非常に有利です。
もう一つ、素数候補を同じ素数で割り切れる場合が周期的 に登場すると、ふるいがけが非常に有利になります。
もっともふるいがけが有利な形式はnを固定した場合に kを変化させる場合です。これはエラトステネスのふるいと ほとんど同じアルゴリズムで実施できます。 たとえば、 k1*2^n+1が3で割り切れるとすると、 (k1+3)*2^n+1 (k1+6)*2^n+1 (k1+9)*2^n+1 ... も以下同様に3で割り切れます。 ふるいがけにつかう素数5,7,11,...ときても同様です。
長いので続きます
|
| Re: ふるいがけ考察 nohara - 2004/08/01(Sun) 01:29 No.160 | |
|
|
では、kを固定してnを変化させる場合はどうでしょうか。 上記と同じように考えられそうですが、実はそんなに簡単ではありません。 (と偉そうなことはあまりいえないのですが)以下説明します。
例えば、3*2^n+1をふるいにかけるとします。 3では割り切れないのは自明なので、ふるいがけ素数は5からです。
3*2^n+1を5で割ったときの余りをn=200万から見ると、 nの値 2000000 あまり 4 2000001 あまり 2 2000002 あまり 3 2000003 あまり 0 =5で割り切れるので候補脱落 2000004 あまり 4 2000005 あまり 2 2000006 あまり 3 2000007 あまり 0 =5で割り切れるので候補脱落 2000008 あまり 4 2000009 あまり 2 2000010 あまり 3 2000011 あまり 0 =5で割り切れるので候補脱落 2000012 あまり 4 2000013 あまり 2 2000014 あまり 3 2000015 あまり 0 =5で割り切れるので候補脱落 2000016 あまり 4 2000017 あまり 2 2000018 あまり 3 2000019 あまり 0 =5で割り切れるので候補脱落 2000020 あまり 4 これを見れば気が付くと思うのですが、kを固定した場合は ある素数で割り切れる候補が周期的に登場していることが 分かります。nの値が4m+3の場合は割り切れています。 周期は4となります
同様に7で割ったときも見てみましょう。 nの値 (*は5で割り切れる候補) 2000000 あまり 6 2000001 あまり 4 2000002 あまり 0 =7で割り切れるので候補脱落 2000003 あまり 6 * 2000004 あまり 4 2000005 あまり 0 =7で割り切れるので候補脱落 2000006 あまり 6 2000007 あまり 4 * 2000008 あまり 0 =7で割り切れるので候補脱落 2000009 あまり 6 2000010 あまり 4 2000011 あまり 0 =7で割り切れるので候補脱落* 2000012 あまり 6 2000013 あまり 4 2000014 あまり 0 =7で割り切れるので候補脱落 2000015 あまり 6 * 2000016 あまり 4 2000017 あまり 0 =7で割り切れるので候補脱落 2000018 あまり 6 2000019 あまり 4 * 2000020 あまり 0 =7で割り切れるので候補脱落 nの値が3m+1の場合は割り切れています。 周期は3となります
更に続きます
|
| Re: ふるいがけ考察 nohara - 2004/08/01(Sun) 01:33 No.161 | |
|
|
11,13の場合は都合上スキップし、同様に17で割った場合の余りを示します。 2000000 あまり 4 2000001 あまり 7 2000002 あまり 13 2000003 あまり 8 2000004 あまり 15 2000005 あまり 12 2000006 あまり 6 2000007 あまり 11 2000008 あまり 4 2000009 あまり 7 2000010 あまり 13 2000011 あまり 8 2000012 あまり 15 2000013 あまり 12 2000014 あまり 6 2000015 あまり 11 2000016 あまり 4 2000017 あまり 7 2000018 あまり 13 2000019 あまり 8 2000020 あまり 15 この場合は、nの値に関係なく割り切れません。k*2^n+1の形式で kの約数で無いにも関わらず、いかなるk*2^n+1をも割り切らない 素数pが存在します。(多分無限にあると思いますが、そういうところ はあまり調べていません) ですが、あまりの値が周期性を持っていることにも注目してください。 このときの周期は8となります。 全てのk*b^n+1/-1を素数pで割ったときの余りはかならず p-1の約数を周期に持ちます。
p=5は割り切れる候補がp-1の周期となる場合 p=7は割り切れる候補が(p-1)/2の周期となる場合 p=17は割り切れる例が無い場合
ちなみに、3*2^n+1の約数にならない素数は17の他に 23,31,41,43,47,71,73,89,109,....と続きます。
このように、ふるいがけ素数の値によって、挙動が異なり、 周期もp-1の約数の数だけ可能性があります。各ふるいがけ素数 pに対してどのような挙動となるかを判別しなければならないため、 NewPGenにおいて、k固定モードではふるいの速度が遅くなるわけです。 最初、NewPGenが登場したときはk固定モードはサポート されていませんでした。
更に続きます(少し時間が空きますが)
|
| Re: ふるいがけ考察 nohara - 2004/08/01(Sun) 02:58 No.162 | |
|
|
いずれにせよ、k*b^n+1/-1という形式では、ある素因数pで割り切れるケースは k固定でもn固定でも周期的に登場することが分かるかと思います。
一方、b^(2^m)+1の形式の一般フェルマー数は bだけを変えれば、その約数は2^(m+1)*k+1という形式に 限られるので、上記の例に比べるとふるいがけ素数を 大きな値にとることができるわけです。その分は確かに 有利なのですが、素因数の出現は周期性がありません。
b^8192+1のケースでみてみます bの値 小さな素因数 10000 : 65537 * 5767169 * 10002 : 10004 : 10006 : 139493377 * 10008 : 15553462273 * 10010 : 10012 : 10014 : 920518657 * 10016 : 10018 : 10020 : 1196033 * 1376257 * 10022 : 65537 * 10024 : 1689108481 * 10026 : 93585409 * 10028 : 10030 : 147457 * 10032 : 7667713 * 119308289 * 10034 : 65537 * 163841 * 1720321 * 2768897 * 10737647617 * 10036 : 10038 : 3194881 * 238043137 * 10040 : 163841 * 10042 : 2572289 * 10044 : 10046 : 3391489 * 10048 : 7667713 * 18137089 * 例えば、上の表からでは65537の出現はb=10000,10022,10034で 以降10054,10072,10078,10080,...と続きます。 次はどこで65537で割れるのか分からないため、全ての候補に 対して、65537で割っていかなければなりません。
GFNのふるいにおける優位性は、素数生成のための手間が 共有できる、という一点のみなのに対して、k*b^n+1/-1のケースは 素因数が周期的に登場することを利用すれば割り算を使う ケースが減らせることもあるのです。したがって、2kn+1という 形式に限られる利点を生かしても、GFNのふるい上限は 比較的小さなところまでしか実施できません。
あと重要なことはふるいによっての残り素数候補数は 大体ふるいがけを行なった素数の大きさの対数値に反比例します。
例えば、100万桁程度の大きさの数に対して、 k*2^n+1/-1では10^14程度までふるいがけできたとします b^(2^m)+1では10^17程度までふるいがけできたとします。
上記の場合、素数が存在する1個あたりの候補数は 大体k*2^n+1/-1とGFNとを比較するとお互いのふるい上限素数の 対数値から大体17:14となります。
もし、残り候補のPRP判定に要する時間が14:17ということで あれば、結局は素数発見難易度における両者の差は 存在しない、ということになります。
また、円分数でもbaseが小さく、指数が大きいほうが対象となる 桁数の割に約数の制限が大きくなるので、この点ではメルセンヌ 素数探索は他の追随を許さない優位性があります。
|
| Re: ふるいがけ考察 nohara - 2004/08/01(Sun) 04:38 No.163 | |
|
|
長々と書いて申し訳ありません。
結局、素数探索の効率を考えるなら、PRPテストに要する時間が 桁数の割りに少ないものを選ぶのが最も効率が良くなります。 ふるい効率はあくまで従です。
私の今までの経験ではP3の場合ですが、Mersenne素数と Proth.exeでのGFNはほぼ同等、 それよりやや落ちてLLRのkが小さい場合 更に落ちてProth primeとGeneFerによるGFN となります。 それ以下が他のbや一般的な形式となります
Mersenne素数とGFNの差はほとんど無いのですが、 (すみません、冒頭の書き込みと少し意見が変わりました) 同じ桁数なら指数が大きな分だけ、Mersenne素数がほんの少し 有利となります。
また、Mersenne素数が求められる理由としては、数の形式が 非常にシンプルであること、また、メルセンヌ数から完全数が 得られるという、他の素数には無い特徴があります。完全数と いうのはその数自身を除く約数の合計が元の数と等しい数の ことを言います。偶数である完全数は2^p-1が素数であるとき、 (2^p-1)*2^(p-1)となり、偶数の完全数は全てこの形です。 また、奇数の完全数については発見されておらず(存在しない ことが証明されたようなニュースを聞いたような気がするの ですが間違いかもしれません。)、つまり、メルセンヌ素数の 数だけしか完全数は知られていません。
そういった面も、メルセンヌ素数探索が優先的にされてきた 理由かと思います。
ただ、メルセンヌ素数は対象となる数自体が非常に限られて いるので、例えば、1000万桁超えとなる素数はずっと登場しない かもしれません。指数で3倍、4倍という区間で素数が登場しない ところが実際あります。 とすると、特定の桁数を狙う場合でGFNなどの他の形式の素数が 出し抜く余地があるのでは無いかと考えています。 これも運任せですが。
|
| Re: ふるいがけ考察 216091 - 2004/08/03(Tue) 21:18 No.165 | |
|
|
こんにちは、
noharaさん説明ありがとうございます。
>あと重要なことはふるいによっての残り素数候補数は >大体ふるいがけを行なった素数の大きさの対数値に反比例します。
対数なのであまりかわりないよということですね。
P4 上でも $ time ./genefer80 GeneFer 1.3 (80-bit x86-ASM) Copyright (C) 2001-2003, Yves GALLOT N: 4096 b: 100000000 100000000^4096+1 is composite (err = 3.59e-01). user 1m34.280s $ time ./genefer64 GeneFer 1.3 (x86-ASM) Copyright (C) 2001-2003, Yves GALLOT N: 8192 b: 10000 10000^8192+1 is composite (err = 7.10e-06). user 2m19.080s と桁数によっては genefer80 の方が高速な場合がありました。 (その桁数では llr がより速いということですが) 1000万桁では、b^2097152+1 で genefer64 の範囲ですね。
|
| Re: ふるいがけ考察 nohara - 2004/08/08(Sun) 23:33 No.169 | |
|
|
216091さんwrote >1000万桁では、b^2097152+1 で genefer64 の範囲ですね。
そうですね。 1000万桁を狙う場合、個人的には58664<b<576000はProth.exe でテストし、576000以上はGeneFerでテストするのが良いので はないかと思っています。
ただ、1000万桁を狙うとなると、少なくとも万単位の 参加者が必要なので、これをどうやって調達するか、 という問題があります。また素数判定テストに要する時間は 高速なマシンでも1つのテストに2ヶ月はかかるため、継続して 参加者の意欲を持続させることがより重要になってくると 思います。そういう意味では計算途中経過ファイルを共有 できるようなシステムを構築することは有用と考えています。 (まあ、素数探索プロジェクトに書いたことですが)
ただ、それでも1000万桁は必要なパワーが多すぎる、 という問題がありますね。
|
| Re: ふるいがけ考察 216091 - 2004/08/11(Wed) 20:08 No.176 | |
|
|
こんにちは、
>一方、b^(2^m)+1の形式の一般フェルマー数は >bだけを変えれば、その約数は2^(m+1)*k+1という形式に >限られる
(2x)^2+1 の形の整数の約数は、4n+1 の形を持つという 記述を見つけました。 GFN もこの形なので 「GFN の約数は、は 2^(m+1)*k+1 かつ 4n+1 という 形式に限られる」とできるようです。
|
| Re: ふるいがけ考察 sushi - 2004/08/11(Wed) 22:52 No.177 | |
|
|
こんばんは。 最近素数が見つからないので、思わずPen4 3.0Gを買ってきてしまいました(^^; 手始めにhigaさんのように小さめの双子素数を探してみようと思います。
216091さんへ。 2^(m+1)*k+1 であれば、4n+1の形になると思います。
|
| Re: ふるいがけ考察 216091 - 2004/08/11(Wed) 23:29 No.178 | |
|
|
こんにちは、
そうですね、済みません。 P4 3Ghz ということは自作派ですね。 素数探索専用機の自作だと意外とお金をかけずに ハイエンドが買えるので誘惑に勝てないですね。
|
| Re: ふるいがけ考察 nohara - 2004/08/12(Thu) 01:36 No.179 | |
|
|
>誘惑に勝てないですね。
私も心が動きます。 こちらだと、P4-3GHzマシンのデスクトップは安いもので 1000ユーロ(日本円で約135000円)程度です。ちなみに 19.6%のTVA(日本でいえば消費税)が内税での価格です。 P4マシンは一様に割高ですね。 こちらにも自作ショップはありますが、こちらでは自作 よりも、やや旧型のマシンをバーゲンで狙った方が割安に なるかと思っています。
|
|