# Potenz mit Modulo (über for-Schleife) berechnen



## Eddie (8. Nov 2010)

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



```
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;
	}
```


----------



## Landei (8. Nov 2010)

```
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.


----------



## Schandro (8. Nov 2010)

wenn x 1 ist, wird die schleife einmal durchlaufen, ansonsten keinmal.


----------



## nrg (8. Nov 2010)

b ist überflüssig aber viel wichtiger ist deine Abbruchbedingung in der Schleife. Die solltest du mal überdenken...

"mache solange wie i gleich x"


----------



## Andi_CH (8. Nov 2010)

Heute bin ich Fan der Insel ;-)
Schau mal hier


----------



## Eddie (8. Nov 2010)

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:


```
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;
}
```


----------



## Landei (8. Nov 2010)

Wie schon von anderen erwähnt ist dein b hyperliquid:


```
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;
}
```


----------



## henpara (8. Nov 2010)

ja das kenn ich 

jetzt noch schnell "thema auf erledigt" setzen und alles is super.

mfg


----------



## Eddie (8. Nov 2010)

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


----------

