
ウラムの螺旋の斜めの線は本物だった。長い対角線の素数率39.28%に対し、ランダム対照200回の最大は15.46%
1963年、数学者スタニスワフ・ウラムは退屈な講演の最中に落書きをしていた。方眼紙に1, 2, 3, … と渦巻き状に数を書き、素数に丸をつけていった。すると、丸が斜めの線に並んで見えた。
素数の並びには規則がないはずだ。だから、渦巻きに並べて斜めの筋が見えるというのは、それだけで妙な話になる。
ただ、こういう「模様が見える」話は疑ってかかったほうがいい。人間は無地の壁にも顔を見つける。本当に線があるのか、それとも私がそう見たいだけなのか。同じ密度でランダムに撒いた対照群と比べれば決着がつく。
実験に使ったコードの全文はGitHubに置いています。
まず、並べてみる
、つまり1から251,001までを渦巻きに並べた。この範囲の素数は22,131個、密度8.81%。

点の数はほぼ同じだ。それでも上には斜めの筋があり、下にはない。目視の段階でもう決着がついている気がするが、数えてみる。
サイズを大きくしていくと、筋が育っていく様子が見える。

自分で拡大したりホバーして数を確かめられるようにもした。
直線ごとの素数密度を数える
横・縦・右下がり対角・右上がり対角の4方向について、すべての直線上の素数の割合を計算し、その最大値を取る。同じことを「同じ密度でランダムに撒いた盤」200枚に対しても行って比較した。

| 向き | 実測の最大 | ランダム200回の最大 |
|---|---|---|
| 横 | 17.17% | 14.37% |
| 縦 | 18.16% | 15.17% |
| 右下がり対角 | 40.29% | 26.83% |
| 右上がり対角 | 37.31% | 29.27% |
全体の素数密度は8.81%。横と縦でも最大17〜18%になるが、ランダム対照でも14〜15%までは出る。明確に差がついたのは対角線だけだった。
ここで警戒すべき点がひとつある。短い直線ほど「たまたま濃い」が起こりやすい。40.29%を出したのは長さ139の線だった。長い線だけで比べたらどうか。
| 対角線の長さ | 最も濃い線の素数率 |
|---|---|
| 40〜150 | 40.3%(長さ139) |
| 150〜300 | 39.4%(長さ249) |
| 300〜501 | 39.3%(長さ443) |
長さで区切ってもほとんど変わらない。そして長さ300以上の対角線に限って対照実験をやり直すと、ランダムの最大は200回で15.46%。実測の39.28%には200回中0回しか近づかなかった。
斜めの線は本物だ。
なぜ斜めなのか
濃かった対角線(長さ443)の上に並ぶ数を取り出すと、249943, 247947, 245959, 243979, 242007, … となる。階差を2回取ると8で一定(1箇所の継ぎ目を除く)。つまりこの線の上には、 という形の2次式の値が並んでいる。
渦巻きの構造上、対角線を1歩進むごとに数が ずつ増えていくので、対角線とは2次式そのものになる。だから「斜めの線が濃い」は、「ある2次式が素数を出しやすい」という主張と同じことを言っている。
2次式が素数を出しやすくなる理由は難しくない。 のような式は、小さい素数で割り切れないように係数が選ばれていれば、候補から一気に合成数が消える。逆にたとえば はすべて偶数なので素数は出てこない。素数を作る式ではなく、合成数を避ける式というのが実態に近い。
オイラーの多項式は本当に強いのか
素数を出しやすい2次式として最も有名なのが、オイラーが1772年に見つけた だ。実際に測った。

| の範囲 | が素数の割合 | 最初に素数でなくなる |
|---|---|---|
| 0〜39 | 100.00% | なし |
| 0〜99 | 86.00% | 40 |
| 0〜999 | 58.10% | 40 |
| 0〜9999 | 51.05% | 40 |
から39まで、40個すべてが素数。41で崩れる( なので当然だが)。それでも を1万まで伸ばして51.05%が素数のままだ。同じ大きさ(5,000万前後)の数がランダムに素数である確率はおよそ5.64%なので、9倍濃い。
そして を1から999まですべて試すと、 が58.10%で断然のトップだった(2位は の46.50%)。250年前に見つかった41は、いまブルートフォースで探し直しても最良のままだった。
まとめ
- のウラムの螺旋で、対角線の最大素数率は40.29%(全体密度8.81%)
- 同じ密度のランダム対照200回では、対角線の最大は26.83%止まり
- 長さ300以上の対角線に限ると、実測39.28%に対しランダムの最大は15.46%。200回中0回しか届かない
- 濃い対角線の上には の値が並んでいる。「斜めの線」は「素数を出しやすい2次式」の言い換えだった
- は 〜39で全部素数、 を1万まで伸ばしても51.05%。 を1〜999で全探索しても41が最良
斜めの線は、素数の性質ではなく「渦巻きに並べたことの性質」だった。
素数の分布そのものに斜めの構造があるわけではない。渦巻きに並べると対角線が2次式になり、2次式の中には合成数を効率よく避けるものがある。だから濃く見える。並べ方を変えれば線も消える。
見えた模様が本物かどうかは、対照群を作れば決着がつく。今回は200枚のランダム盤が15.46%までしか届かず、実測は39.28%だったので、模様は本物だと言い切れた。だが本物であることと、それが対象の性質であることは別だった。線は確かにそこにあって、しかもそれは私が渦巻きを選んだから生まれていた。
データに模様を見つけたとき、次に確かめるべきなのは「偶然か」だけではない。「それは対象の性質か、それとも私の並べ方の性質か」のほうも同じくらい効いてくる。
このブログでは、機械学習の仕組みを実際にコードで実装して確かめた実験をテーマ別に整理しています(拡散モデル・Transformer・強化学習・多様体学習・過学習など)。


