Potenz mit Modulo (über for-Schleife) berechnen

Eddie

Mitglied
Hallo zusammen,

ich bin neu hier, studiere Wirtschaftsinformatik und habe im Moment einige Probleme mit der Programmierung in Java und hoffe, dass ihr mir vielleicht weiterhelfen könnt.
Im Moment geht es darum, mittels einer for-Schleife eine Methode zu implementieren, mit der sich eine Funktion der Form a^x mod p berechnen lässt (also z. B. 1234^12 mod 541 = 237).

Das soll allerdings nur der erste Schritt sein. Im weiteren Aufgabenverlauf sollen wir diese Funktion auch noch rekursiv sowie durch Darstellung der Exponenten in Binärform implementieren.

Ich scheitere allerdings irgendwie schon an der ersten Teilaufgabe ???:L

Ich habe mir gedacht, erst einmal die Potenzierung an sich zu implementieren. Also soll mir das Programm nur das Ergebnis von a^x zurückgeben. Sollte eigentlich nicht so schwer sein. Aber irgendwie bekomme ich immer das Ergenis 0 raus, wenn ich z. B. 4^2 rechnen will. Könnt ihr mir vielleicht sagen, wo der Fehler im Code ist? Wenn ich den Code auf Papier durchgehe, finde ich den Fehler auch nicht.

Gruß
Eddie


Java:
public int modExpSimple(int x, int a, int p){
		int erg = 0;
		int b = a;
		
		for (int i=1; i==x; i++){
			erg = b * a;
			b = erg;
		}
		
		System.out.println("Das Ergebnis lautet: " + erg);
		
		return erg;
	}
 
Java:
for (int i=1; i==x; i++){
ist schonmal falsch. Die Schleife wird solange ausgeführt, wie die mittlere Bedingung stimmt. Wenn x ungleich 1 ist, ist die Bedingung schon beim ersten Durchlauf (wo i == 1 ist) nicht erfüllt, und deine Schleife läuft überhaupt gar nicht.
 
b ist überflüssig aber viel wichtiger ist deine Abbruchbedingung in der Schleife. Die solltest du mal überdenken...

"mache solange wie i gleich x"
 
und schon klappts auch mit dem Modulo...vielen Dank für die schnelle Hilfe 🙂
Irgendwie sieht man den Wald vor lauter Bäumen nicht, wenn man zu lange davor sitzt.
Das Ergebnis funktioniert nun auf jeden Fall:

Java:
public int modExpSimple(int x, int a, int p){

		int erg = 0;
		int b = a;
		
		for (int i=1; i<x; i++){
			erg = (b * a) % p;
			b = erg;
		}
		
		return erg;
}
 
Wie schon von anderen erwähnt ist dein b hyperliquid:

Java:
public int modExpSimple(int x, int a, int p){
        int erg = 1;
        for (int i=0; i<x; i++){
            erg = (a * erg) % p;
        }
        return erg;
}
 
Stimmt b ist auch überflüssig...aber peinlich ist mir nur das mit der Schleife...sollte nicht vorkommen 😳

Seis drum..Thema auf erledigt gesetzt...besten Dank an euch alle 🙂

Gruß
Eddie
 

Zurück
Oben