らんだむな記憶

blogというものを体験してみようか!的なー

有限体

ぼんやりと $\mathbb{F}_q$ について思いをはせる。
$\mathbb{F}_q$ の乗法群 $\mathbb{F}_q^\times$ についてpythonでばばっと調べもの。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

def invertible(q):
    a = [1]
    for i in range(2, q):
        for j in range(2, q):
            if i * j % q == 1:
                a.append(i)
                break
    return a

def show_Fq(q):
    print "F_{}:".format(q)
    a = np.array(invertible(q))
    b = a
    print "  invertible: {}".format(a)
    print "    x in invertible:"
    for i in range(2, q+1):
        b = b * a % q
        print "      x^{}   : {}".format(i, b)
        if np.all(b == 1):
            break
    print

for q in range(2, 25+1):
    show_Fq(q)

numpyを使いたいけど、Windows用の64bitビルドpython.exeの場合、numpyをビルドするか非公式ビルドを使う必要があるようだ。これだけのために32bit python.exeを入れるとか、ビルドするとか面倒だし、Ubuntuを起動するのが今日はダルぃので、Web-based online coding environment | paiza.IOを使う。Webの実行環境ってちょっとした時に便利だ!

くっそ長い出力だが結果は以下:

F_2:
  invertible: [1]
    x in invertible:
      x^2   : [1]

F_3:
  invertible: [1 2]
    x in invertible:
      x^2   : [1 1]

F_4:
  invertible: [1 3]
    x in invertible:
      x^2   : [1 1]

F_5:
  invertible: [1 2 3 4]
    x in invertible:
      x^2   : [1 4 4 1]
      x^3   : [1 3 2 4]
      x^4   : [1 1 1 1]

F_6:
  invertible: [1 5]
    x in invertible:
      x^2   : [1 1]

F_7:
  invertible: [1 2 3 4 5 6]
    x in invertible:
      x^2   : [1 4 2 2 4 1]
      x^3   : [1 1 6 1 6 6]
      x^4   : [1 2 4 4 2 1]
      x^5   : [1 4 5 2 3 6]
      x^6   : [1 1 1 1 1 1]

F_8:
  invertible: [1 3 5 7]
    x in invertible:
      x^2   : [1 1 1 1]

F_9:
  invertible: [1 2 4 5 7 8]
    x in invertible:
      x^2   : [1 4 7 7 4 1]
      x^3   : [1 8 1 8 1 8]
      x^4   : [1 7 4 4 7 1]
      x^5   : [1 5 7 2 4 8]
      x^6   : [1 1 1 1 1 1]

F_10:
  invertible: [1 3 7 9]
    x in invertible:
      x^2   : [1 9 9 1]
      x^3   : [1 7 3 9]
      x^4   : [1 1 1 1]

...

F_12:
  invertible: [ 1  5  7 11]
    x in invertible:
      x^2   : [1 1 1 1]

...

F_14:
  invertible: [ 1  3  5  9 11 13]
    x in invertible:
      x^2   : [ 1  9 11 11  9  1]
      x^3   : [ 1 13 13  1  1 13]
      x^4   : [ 1 11  9  9 11  1]
      x^5   : [ 1  5  3 11  9 13]
      x^6   : [1 1 1 1 1 1]

...

$q = p$ : 素数の場合には、$p \!\not|\, a$ なる $a$ に対して $a^{p-1} \equiv 1\ \mathrm{(mod\ p)}$ (Fermatの小定理)なので(まぁ、巡回群だし)、まぁ、そうかなと思う結果だが、素数でない場合もあるところでずらっと1になるんだなぁ。

$q$ の1以外の最小の約数のところで 1 と -1 が並ぶのかなと思ったが、$q=14$ の時がそうなっていないので、そういうわけでもないんだが。奥が深いな。代数は全然ピンと来ないな。
$p_1,\ p_2$ が共に素数の場合、中国の剰余定理によって $\mathbb{Z}/p_1 p_2\mathbb{Z} \simeq \mathbb{Z}/p_1\mathbb{Z} \times \mathbb{Z}/p_2\mathbb{Z}$ だから、$\mathbb{F}_{p_1}$ と $\mathbb{F}_{p_2}$ の状況を見ることで、$q=6, 10, 14$ はまぁ分かるか。$q=4, 8, 9$ あたりはSylowの定理の辺のネタが出てきてしまいそうだ... おぉ、くわばらくわばら...