// Filtered on Sonntag 2022-März-13 at 23:15:38 by Tippfilter 0.4-4-g83a7d89 (development build)

/** Diese Klasse enthält eine Methode zur schnellen modularen Potenzierung,
 * die bei RSA und anderen modernen Kryptoverfahren zum Einsatz kommt.
 * 
 * Sie ist als Programmierübung für Oberstufenschüler gedacht. Dabei stehen
 * die rekursive Implementierung und die modulo-Operation im Vordergrund.
 * 
 * @author Urs Lautebach
 * @author Tobias Nopper
 * @version 2021-03-24
 * Dieses Projekt steht unter der Lizenz CC BY-NC-SA 4.0
 * This project is licensed under CC BY-NC-SA 4.0
 * (https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) */
public class SchnellePotenzierung {

    /** Berechnet die modulare Potenz a^b mod m.
     * Der Modulo der Rest bei der Division; 16:6 = 2 Rest 4, also ist 
     * 16 mod 6 = 4.
     * Java hat dafür den Operator "%"; "16%6" liefert also 4.
     * @param a Basis der Potenzierung
     * @param b Exponent der Potenzierung
     * @param m Modul der Restklasse, in der gerechnet wird
     * @return Das Ergebnis der Rechnung a^b mod m.     */
    public static int modPotenz(int a, int b, int m) {
        // Tipp: Überlegen Sie, was bei der Potenzierung a^b der einfachste
        // Fall ist (oder die einfachsten Fälle); die gleiche Überlegung gilt
        // auch für a^b mod m. 
        // Überlegen Sie dann, wie Sie andere Fälle darauf reduzieren können.
        // Das Zwischenergebnis kann größer sein, als int-Variablen
        // aufnehmen können, deswegen nimmt man dafür den Datentyp long: 
        return -12345; // TODO
    }
}

