2014年07月

サイト運営者の日々の日記。2014年07月。

09日

30行エラトステネス

素数判定プログラムの下の方に書いた多行エラトステネスの実装、30行まで。多行化の恩恵はほとんど感じられなかった。先のページのデモより速いのは9年前のわたしが書いたコードが下手だったというだけの違いである。

ちなみに配列数の節約のためにすべての素数候補の配列を作ってから削るのではなく新たな候補に対して既存の素数で割っている。6行と30行はそれぞれ6の倍数・30の倍数ごとに判定するので、1000000を入力しても1000020まで範囲に勝手に含む点に注意。

デモ

求める最大値
多行エラトステネス法
6行 30行

仕組み

先のページより表を持ってきている。30の倍数で区切った範囲内で、素数が含まれる列がp=1,7,11,13,17,19,23,29とした時30i+pで表せることを利用して候補を絞る。初期配列pを作るコストが難物である点が問題で、この行数はn!行に拡張するほど効率が上がる。

30行のエラトステネス表
-- 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210

ページ情報

作成日時
2014/07/09
最終更新日時
2014/07/09
HTML4.01版
y14m07.html
XHTML1.1版
y14m07.xhtml
XML原本
y14m07.xml