Modulo Operator

Datenverschlüsselung und Primfaktorenzerlegung

Mit dem Modulo Operator lässt sich der Rest einer Division ermitteln. Der Modulo Operator ist ist in der Programmierung ein sehr wichtiges Werkzeug um z.B. den GGT zweier Zahlen zu berechnen oder Primfaktoren zu zerlegen. Auch im Bereich der Datenverschlüsselung spielt der Modulo Operator eine wichtige Rolle.

Wie in der ersten Zeile erwähnt, berechnet der Modulo Operator % nur den Rest einer Division von zwei Ganzzahlen. Die folgenden Beispiele zeigen den Unterschied einer Ganzzahldivision und einer Division mit Modulo:

6 / 6 = 1 mit 0 Rest

6 % 6 = 0

6 / 5 = 1 mit 1 Rest

6 % 5 = 1

6 / 4 = 1 mit 2 Rest

6 % 4 = 2

6 / 3 = 2 mit 0 Rest

6 % 3 = 0

 

Im folgenden Beispiel wird eine Modulo-Division ( 6 % 4 ) durchgeführt:

namespace ConsoleApplication_modulo
{
    class Program
    {
        static void Main(string[] args)
        {
            int dividend = 6;
            int divisor = 4;

            Console.WriteLine("Der Rest = " + dividend % divisor); // Rest = 2

            Console.ReadLine();
        }
    }
}

 

Divisor größer als Dividend

Was passiert aber, wenn der Divisor > Dividend ist?

Zum Beispiel 6 % 26 oder 7 % 26?

In diesen Fällen ist der Rest gleich dem Divisor

6 % 26 = 6

7 % 26 = 7

 

lineare und mathematische Modulo-Division 

Interessant wird die Modulo-Division bei negativen Zahlen.

Welches Ergebnis liefert z.B. die Modulo-Division -8 % 3 ?

Das kommt jetzt darauf an, mit welcher Methode gerechnet wird. Man unterscheidet hier die lineare und die mathematische Modulo-Division.

  • Die lineare Modulo-Division liefert als Ergebnis -8 % 3 = -2
  • Die mathematische Modulo-Division liefert als Ergebnis -8 % 3 = 1

 

Das folgende Programm berechnet die Modulo-Division einer negativen Zahl.
Der Computer rechnet hier nach der linearen Methode und liefert als Ergebnis -2.

 

namespace ConsoleApplication_modulo
{
    class Program
    {
        static void Main(string[] args)
        {
            int dividend = -8;
            int divisor = 3;

            Console.WriteLine("Der Rest = " + dividend % divisor); // Rest = -2

            Console.ReadLine();
        }
    }
}

 

Wenn Sie -8 mod 3 per google oder WolframAlpha berechnen, wird mit der mathematischen Methode gerechnet und Sie erhalten als Ergebnis 1.

Welche Methode nun angewandt wird, hängt vom zu lösenden Problem ab.

 

MATHEMATISCHE MODULO-DIVISION

namespace ConsoleApplication_modulo
{
    class Program
    {
        static void Main(string[] args)
        {
            int dividend = -8;
            int divisor = 3;
            int rest;

            rest = Modulo(dividend, divisor);

            Console.WriteLine("Der Rest = " + rest);

            Console.ReadLine();
        }

        private static int Modulo(int dividend, int divisor)
        {
            int rest = dividend % divisor;  // Berechnet den Rest mit der symmetrischen Methode

            if (rest < 0)                   // Ist der Dividend und somit auch der Rest negativ
                return rest + divisor;      // Addiere den Divisor um den mathematischen Modulowert zu berechnen
            else
                return rest;                // Ist der Rest positiv, ist rest auch das ergebnis
        }
    }
}