Brauche Hilfe bei Rechnung (Exponentiation)

Dondono

Mitglied
Hallo Forum,

was ich berechnen will ist Folgendes:


( a^b ) mod r = e

Dazu habe ich b mit 0 initialisiert.
Die restlichen Werte lasse ich einlesen.

Habe dazu ein ne if- Schleife benutzt, die b hochzählen lässt bis die Bedingung stimmt.



Wäre jemand bitte so nett , dass so umzuschreiben bis es stimmt?

Wenn es auch noch mehre b Werte auswerfen könnte wäre es brilliant.

:applaus: :toll:



Java:
import java.util.Scanner;

public class dlp {
	int a; int b=0;int g;int r;
	System.out.println("Bitte geben Sie Ihr a ein:");
	Scanner s = new Scanner(System.in);
	int a= s.nextInt();
	System.out.println("Im welchem Zahlenring soll gerechnet werden:");
	Scanner s = new Scanner(System.in);
	int r= s.nextInt();
	System.out.println("Bitte geben Sie Ihr gewünschtes Ergebnis an: ");
	Scanner s = new Scanner(System.in);
	int e= s.nextInt();
	
	
	
	
	if ((a^b)%r!=e){   		b++;
		}
       // Weiß nicht wie Exponentiationen geht
	else {
		System.out.println(a+"^"+b+"mod"+r+"="+e);
	}
 
Zuletzt bearbeitet:
Wo sind den die restlichen einträge hin verschwunden?? fand die recht amüsant.
@Dondono
hab mir mal deine anderen Einträge angeschaut. Ich finds toll, dass du java lernen willst, aber es bringt nichts, wenn du fremden code nimmts, ein forum fragst, ob dir das jmd ändern kann und dir das ergebnis anschaust. Hab das in meinem ersten Semester OOP gelernt^^ (andere machen lassen und code angeschaut, hat für die prüfung nicht gereicht.
Es gibt viele bücher (java von kopf bis fuß, java für dummies, ...) in denen die Grundlagen erklärt werden.
Es soll kein angriff gegen deine Person sein, aber lern bitte erstmal die Grundlagen.
 
Das habe ich selbst geschrieben. Das Einzige wobei ich Hilfe wollte war , wie ich den Ausdruck in der if - Bedingung korrekt formulieren kann.
 
Wie gesagt, in der api steht, wie in Java a^b implementiert. als tipp kannst du dir ja mal ne übersetzung von hoch/exponent suchen, dann müsstest du es schnell finden
 
der Square-and-Multiply Ansatz ist da deutlich schneller als erst eine große Zahl mittels Exponenten zu erzeugen und dann diese modulo zu nehmen.

Java:
public static long squareAndMultiply(long base, long exponent, long mod)
	{
		long preFactor = 1;
		base = (base * base) % mod; 
		
		while (exponent > 1)
		{
			if (Long.lowestOneBit(exponent) == 1)
			{
				preFactor = (preFactor * base) % mod;
				exponent--;
			}
			
			exponent = exponent / 2;
			base = (base * base) % mod; 
		}
		
		return (preFactor * base ) % mod;
	}
 
So habe meinen Code korrigiert :

Java:
import java.util.Scanner;

public class kry {
	public static void main(String args[]){
	
		int a; 
		int b=0;
		
		int r;
		int e;
		
		
		System.out.println("Bitte geben Sie Ihr a ein:");
		
		
		Scanner s1 = new Scanner(System.in);
		a= s1.nextInt();
		System.out.println("Im welcher Zahlengruppe soll gerechnet werden:");
		Scanner s2 = new Scanner(System.in);
		r= s2.nextInt();
		System.out.println("Bitte geben Sie Ihr gewünschtes Ergebnis an: ");
		Scanner s3 = new Scanner(System.in);
		e= s3.nextInt();
		
		int power= (int) Math.pow(a, b);
		
		
		
		
		if (power % r==e){  
			System.out.println(a+"^"+b+"="+e+"mod"+r);
			
			}
		else {
			b++;
		}
		
	}
	
}

A, r und e lassen sich eintippen , jedoch bekomme ich keine Ausgabe.

Kann mir da einer helfen?
 
liegt wohl daran, dass nur eine ausgabe erzeugt wird, wenn power % r ==e ist ober dir fehlt ein Klammerpaar wegen vor- und nachrangier behandlung von operatoren.
probier mal das so zu machen

Java:
 if ((power % r)==e){  
            System.out.println(a+"^"+b+"="+e+"mod"+r);
           
            }
        else {
            b++;
        }
 
fir fehlt glaub auch ne schleife, die etwas berechnet, so bekommst du nur ein für power raus und den vergleichst du

vlt. brauchs du sowas wie
Java:
int power= (int) Math.pow(a, b);
while( (power % r)!=e){
    b++;
    power= (int) Math.pow(a, b);
}
 

Zurück
Oben