Einführung in C#
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 } } }