Python-Klasse ModInt
Für Berechnungen modulo n wird die folgende Klasse ModInt verwendet. Die Zahl n wird als Klassenattribut ModInt.n gespeichert. Vor Beginn der Verwendung der Klasse ModInt muss n mit einem Wert belegt werden, zum Beispiel durch ModInt.n = 7.
Klasse ModInt
Die Klasse ModInt repräsentiert Elemente des Körpers ℤn und stellt die erforderlichen Operationen für die Grundrechenarten zur Verfügung. Dies geschieht, indem die Operatoren überschrieben werden, etwa der Operator + durch die Methode __add__. Für die Funktion rec (reciprocal - Kehrwert) wird die Funktion modinverse zur Berechnung des multiplikativ inversen Elements modulo n aus der Klasse BasicFunctions importiert.
ModInt.py
from BasicFunctions import *
class ModInt(object):
def __init__(self, i):
self.i=i % ModInt.n
def __add__(self, other):
return ModInt(self.i+other.i)
def __neg__(self):
return ModInt(-self.i)
def __sub__(self, other):
return self+(-other)
def __mul__(self, other):
return ModInt(self.i*other.i)
def rec(self):
return ModInt(modinverse(self.i, ModInt.n))
def __div__(self, other):
return self*other.rec()
def __pow__(self, k):
if k==0:
return ModInt(1)
if k%2==1:
return self*self**(k-1)
else:
return (self*self)**(k//2)
def __eq__(self, other):
return self.i==other.i
def __str__(self):
return str(self.i)
if __name__=="__main__":
def assertion(k, r):
assert str(k)==str(r)
ModInt.n=7
s=ModInt(2)
t=ModInt(13)
assertion(s, 2)
assertion(t, 6)
assertion(s+t, 1)
assertion(s*t, 5)
assertion(s-t, 3)
assertion(s/t, 5)
assertion(s**999, 1)
assertion(s*t, s/t)
print("Ok")
Weiter mit:
[up]
H.W. Lang mail@hwlang.de Impressum Datenschutz
Created: 15.06.2025 Updated: 15.06.2025
Diese Webseiten sind größtenteils während meiner Lehrtätigkeit an der Hochschule Flensburg entstanden