1
1

More than 3 years have passed since last update.

円周率には全ての数字の組み合わせが現れるか?

Last updated at Posted at 2020-03-17

 ふと気になったので検証してみた。
今回は

\begin{align}
f(x) &= x桁の整数がすべて現れるような桁数
\end{align}

として計算します。
例えば、f(x)=33というのは、(整数部を含め)小数第32位まで見ればすべての数字が表れるということを示しています。

ある無理数において特定の数列が存在することを証明するのには観測するしかなく、観測するまでそれが存在するかどうかは分からないが観測した瞬間に特定の数列が無理数に存在することが示されるの、面白くないですか?ぼくは面白いと思います。例えば0が12桁連続で存在する場所だったり、直観に反していたとしても観測さえしてしまえば存在するのです。13桁連続で存在する場所はぼくは知らないのですが、存在するかもしれないと考えたらワクワクします。日本科学未来館とかでそんな感じの展示があった気がするけれど、最後に行ったのが小学生の頃なので詳細までは覚えてないです。

検証コード


n = int(input())
with open("pi-10oku.txt") as f:
    pi = f.read()
    print("read")

length = [False] * (10**n)
for i in range(len(e)):
    length[int(e[i:i+n])] = True
    if sum(length) == 10**(n):
        print(i+1)
        break

pi-10oku.txtはこちらからダウンロードできます。
String型で検証するので、小数点はあらかじめ消しておくと良いでしょう。
もしくはこちらのプログラムで計算することが出来ます。
参考:円周率を求める


def arctan(p, n):
    x = p//n
    nn = n*n
    c = 1
    s = x
    k = 1
    while x > 0:
        x //= nn
        k += 2
        c = -c
        s += c*(x//k)
    return s

def pi_mantissa(digit, redund=10):
    p = 10**digit
    q = 10**redund
    p *= q
    pi = 4*(12*arctan(p,18)+8*arctan(p,57)-5*arctan(p,239))
    pi //= q
    return pi

print(pi_mantissa(求めたい桁数))

こちらのプログラムは、1万桁程度なら高速に求めることが可能ですが、桁数が多くなるほど計算時間がめちゃくちゃ伸びるので注意してください。

実行結果

n=1 -> f(x)=33
n=2 -> f(x)=606
n=3 -> f(x)=8554
n=4 -> f(x)=99847
n=5 -> f(x)=1369561

感想

nが大きくなったらなんか収束しそうだけど計算を待つのがしんどいです。
途中経過とかを見ていると、やはり最初はテンポよく見つかっているけれど後の方になっていくにつれて見つかるのが遅くなってゆくので、コンプガチャが違法になる理由も分かるなぁと思いました。

余談

ネイピア数だとこうなります。
ネイピア数は良い感じのネットソースが無かったのですが、こちらのデータを良い感じにコピペしたり改行や空白を置換すると使えるデータになります。
置換に関しては、ぼくは普段Wordを使っていますが、好きなものを使えばいいと思います。

n=1 -> f(x)=21
n=2 -> f(x)=371
n=3 -> f(x)=8090
n=4 -> f(x)=102125
n=5 -> f(x)<1000000
# n=5 において、100万桁調べたときは99999通り見つかっています

100万桁までのデータしか見つからなかったので、n=5の解を見つけることが出来ませんでした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1