Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

素体をpythonで実装する

素体  F_p (pは素数)をpythonで実装してみました。
なお、計算効率については考慮していません。

#!/usr/bin/env python3

class F:
    def __init__(self, p, v):
        self.p = p
        self.v = v
        self.normalize()

    def normalize(self):
        self.v = self.v % self.p

    def __add__(self, other):
        assert(self.p == other.p)
        return F(self.p, self.v + other.v)

    def __sub__(self, other):
        assert(self.p == other.p)
        return F(self.p, self.v - other.v)

    def __neg__(self):
        return F(self.p, -self.v)

    def __mul__(self, other):
        assert(self.p == other.p)
        return F(self.p, self.v * other.v)

    def __floordiv__(self, other):
        assert(self.p == other.p)
        return F(self.p, self.v * (other.v ** (self.p-2)))

    def __mod__(self, other):
        assert(self.p == other.p)
        return F(self.p, self.v % other.v)

    def iszero(self):
        return self.v == 0

    def __str__(self):
        return str(self.v) 

from field import F                                            
    
a = F(19, 5)
b = F(19, 3)
print(a + b)
print(a - b)                                                   
print(a * b)
print(a // b)
print(a % b) 
8
2
15
8
2

素体ができたので、次回は素体での多項式を作りたいと思います。