p進数を学ぶ

素数の様なものが生物に現れていたら面白いだろうと思う。

例えば、素数ゼミがある。(詳しくはこちら。)

始めましょうか。

  • ようこそ新しい数の世界へ
  • 2進世界をのぞいてみる
  • 実数の世界
  • 再び2進世界へ
  • p進世界
    • 遠近感、 p, p^2, \cdots, p^n, \cdotsが0に近づいていく感じ
  • p進法
    • 全ての自然数は次の形に表せる。
    •  r = a_m p^m + \cdots a_1 p + a_0
  • p進法と小数
    • 全てのp進数は次の形に表せる。
      •  r = \cdots + a_m p^m + \cdots a_1 p + a_0 + a_{-1}/p + \cdots + a_{-n}/p^n
      • 左側に無限に続いているのが特徴
      • 実数の場合は、右側に無限に続いていた。
  • 5進世界の算術
  • 有理数平方根
  • 有理数平方根とp進数
    •  \sqrt{-2}が3進数で(2つ)存在
      • ±に対応している。
    • しかし、 \sqrt{2}は存在しない。
    •  \sqrt{-2}無理数であること。
      • 実数でないから、
    •  \sqrt{2}無理数であること。
      • 3進数でないから、
  • 世界の違いを超えて
    • 実数の世界で議論するより、p進数の世界で議論する方が楽なことがある。
    • 局所大域原理(ハッセの定理)(こちら。)
      •  a,b \in \mathbb{Q} , ax^2+by^2=1に対して、
        • 上の方程式を満たす有理数 x,yが存在することと、
        • それを満たす実数 x,yが存在し、さらにそれを満たすp進数 x,yが存在することが、
        • 同値
      • 三次式だとなりたつとは言えない。
  • 付録:等比数列の和
    • 高校数学のやつ
    •  (1-r)(1+r+\cdots + r^n)=1-r^{n+1}

 

p進数を考えると、嬉しいことがある、ということは分かった。

 

折角なので、お絵かきしてみる。

目的は、 \sqrt{-2}を求めてみることにする。

実数なら、数で表せないものが、p進数だと(無限列だが)表せるのはうれしいことだ。

p=3
n=11

def check(x):
  global n,p
  if (x**2+2)%(3**n)==0:
    return 1
  else:
    return -1

def change(x):
  global p
  ans=0;bit=0#10進法っぽく表す
  while x>0:
    ans+=(10**bit)*(x%p)
    x//=p
    bit+=1
  return ans

def main():
  memo=[]
  for x in range(1,10**7):
    px=check(x)
    if px>0:
      memo.append(x)
  else:
    print(len(memo))
    for y in memo:
      print(change(y))

main()
 
"""
10200211 22212022012 100010200211 122212022012 200010200211 222212022012 1000010200211 1022212022012 1100010200211 1122212022012 1200010200211 1222212022012 2000010200211 2022212022012 2100010200211 2122212022012 2200010200211 2222212022012 10000010200211 10022212022012 10100010200211 10122212022012 10200010200211 10222212022012 11000010200211 11022212022012 11100010200211 11122212022012 11200010200211 11222212022012 12000010200211 12022212022012 12100010200211 12122212022012 12200010200211 12222212022012 20000010200211 20022212022012 20100010200211 20122212022012 20200010200211 20222212022012 21000010200211 21022212022012 21100010200211 21122212022012 21200010200211 21222212022012 22000010200211 22022212022012 22100010200211 22122212022012 22200010200211 22222212022012 100000010200211 100022212022012 100100010200211 100122212022012 100200010200211 100222212022012 101000010200211 101022212022012 101100010200211 101122212022012 101200010200211 101222212022012 102000010200211 102022212022012 102100010200211 102122212022012 102200010200211 102222212022012 110000010200211 110022212022012 110100010200211 110122212022012 110200010200211 110222212022012 111000010200211 111022212022012 111100010200211 111122212022012 111200010200211 111222212022012 112000010200211 112022212022012 112100010200211 112122212022012 112200010200211 112222212022012 120000010200211 120022212022012 120100010200211 120122212022012 120200010200211 120222212022012 121000010200211 121022212022012 121100010200211 121122212022012 121200010200211 121222212022012 122000010200211 122022212022012 122100010200211 122122212022012 122200010200211 122222212022012 200000010200211 200022212022012 200100010200211 200122212022012 200200010200211
"""

山の様に候補が出てくる。

ここで、下6桁を見てみると、丁度、文書にあったように、200211と、022012が並んでいる。

今日はこの当たりで、バイバイ!