Systematische Programmentwicklung

Python-Klasse ModInt

Für Berechnungen modulo n wird die folgende Klasse ModInt verwendet. Die Zahl n wird als Klassen­attribut 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 erforder­lichen Operationen für die Grund­rechenarten zur Verfügung. Dies geschieht, indem die Operatoren über­schrieben werden, etwa der Operator + durch die Methode __add__. Für die Funktion rec (reciprocal - Kehrwert) wird die Funktion modinverse zur Berechnung des multi­plikativ inversen Elements modulo n aus dem Modul BasicFunctions importiert.

 

ModInt.py

from BasicFunctions import *

# repraesentiert ein Element von Zn (dem Koerper der Zahlen modulo n)
# und stellt die Grundrechenoperationen zur Verfuegung
class ModInt(object):

    # Modul n (n Primzahl) ist Klassenattribut (statisches Attribut),
    # muss vor Beginn der Berechnungen gesetzt werden
    # z.B. ModInt.n=23

    def __init__(self, i):
        self.i=i % ModInt.n

    # Addition
    def __add__(self, other):
        return ModInt(self.i+other.i)

    # additiv inverses Element
    def __neg__(self):
        return ModInt(-self.i)

    # Subtraktion
    def __sub__(self, other):
        return self+(-other)

    # Multiplikation
    def __mul__(self, other):
        return ModInt(self.i*other.i)

    # multiplikativ inverses (reziprokes) Element
    def rec(self):
        return ModInt(modinverse(self.i, ModInt.n))

    # Division
    def __div__(self, other):        # __truediv__ in Python 3
        return self*other.rec()
    
    # Exponentiation, k int-Zahl
    def __pow__(self, k):
        if k==0:
            return ModInt(1)
        if k%2==1:    # k ungerade
            return self*self**(k-1)
        else:
            return (self*self)**(k//2)
        
    # Gleichheit
    def __eq__(self, other):
        return self.i==other.i

    # Umwandlung in String
    def __str__(self):
        return str(self.i)
    

 

 

[up]

 


H.W. Lang   mail@hwlang.de   Impressum   Datenschutz
Created: 15.06.2025   Updated: 03.11.2025
Diese Webseiten sind größtenteils während meiner Lehrtätigkeit an der Hochschule Flensburg entstanden