Giuga Programm

Edinita

Mitglied
Hallo!
Ich bin ganz neu hier und auch blutige Java-Anfängerin - falls die Frage hier also fehl am Platz ist, sagt einfach Bescheid ;)

Erstmal kurz zur Aufgabe:
In der ersten Teilaufgabe (a) sollte gezeigt werden, dass folgendes gilt:(a+b) mod m = (( a mod m) + (b mod m)) mod m
(ab) mod m = (( a mod m) (b mod m)) mod m

Soweit so gut.. anschließend soll ein Programm Giuga.java geschrieben werden, welches alle Zahlen n <= 1000 findet, die folgende Bedingung erfüllen:
upload_2015-11-9_22-26-10.png
Als Tipp stand noch dabei (und ich vermute, dass ich den einfach missachte und mein Programm daher nicht tut was es soll):
"Verwenden Sie beim Bilden der Summen und Potenzen das Ergebnis aus Teilaufgabe a, andernfalls reicht der Zahlenbereich von int (oder auch long) bei weitem nicht aus.

Mein Quellcode sieht jetzt wie folgt aus:
upload_2015-11-9_22-32-40.png
Compilieren funktioniert, aber beim Ausführen ergeben sich die Zahlen 2, 3, 5 und 26.
2, 3 und 5 sind ja schon mal super, aber erst mal hat die 26 hier nichts zu suchen und es fehlen ja auch noch jede Menge weitere Primzahlen.
Wie schon gesagt, denke ich dass das Programm erst mal grundsätzlich tun würde was es soll, aber die Zahlen beim Rechnen einfach zu groß werden. Versuch hier schon seit ewigen Zeiten die Rechnungen dementsprechend zu verändern, komme aber einfach nicht mehr weiter.

Kann mir vielleicht jemand weiterhelfen?
Vielen Dank schon mal :)
 

Dompteur

Top Contributor
Die beiden Aussagen aus dem ersten Teil der Aufgabe helfen dir die Zahlen klein zu halten.

Die Aussage : (a+b) mod m = (( a mod m) + (b mod m)) mod m
kannst du verwenden um die Summe, die du bilden musst, klein zu halten.
Also anstatt die Potenzen einfach zu summieren, kannst du zuerst die Potenzen modulo n nehmen und dann die nun kleinere Zahlen aufsummieren. Die Summe muss dann natürlich auch noch einmal mod n genommen werden, da sie ja >n sein könnte.

zB für n=4
upload_2015-11-9_22-26-10-png.8263


==> (k**0 + k**1 + k**2 + k**3) mod 4 = 3
==> ( (k**0 mod 4) + (k**1 mod 4) + (k**2 mod 4) + (k**3 mod 4) ) mod 4 = 3


Die andere Aussage : (ab) mod m = (( a mod m) (b mod m)) mod m
hilft dir die Potenzen klein zu halten.

So wird beispielsweise aus (k**3 mod 4) dann ( ( k mod 4 ) * (k mod 4) * (k mod 4) ) mod 4
oder auch ( ( ( ( k mod 4 ) * (k mod 4) ) mod 4 ) * (k mod 4) ) mod 4

D.h.: Du kannst die Potenz in einer Schleife berechnen und dabei jedes Teilergebnis mod n nehmen. So bleibt dein Zwischenergebnis immer < n.
 

klauskarambulut

Bekanntes Mitglied
Der Code hat darüber hinaus noch ein paar kleine Nachteile, die man leicht beheben kann.

Ich empfehle das ganze in zusätzliche Funktionen aufzuteilen.
Das macht die Implementierung einfacher, übersichtlicher und testbarer.
Java:
/** @return (base^exponent) mod modus
*/
static int modPow(int base, int exponent, int modus)

/** @return giuga-number for n
*/
static int giuga(int n)

Zudem wird es viel einfacher und entspannter die Optimierungen die Dompteur vorschlägt einzubringen und auf Korrektheit zu überprüfen.

Dann kannst du in der main Methode statt while eine in diesem Fall lesbarere for-Schleife nutzen
Java:
for(int n = 1; n < 1000; n++) {
  int giuga = giuga(n);
  int nMinus1 = n - 1;
  if(giuga == nMinus1) {
    System.out.println(n);
  }
}

1
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
211
223
227
229
233
239
241
251
257
263
269
271
277
281
283
293
307
311
313
317
331
337
347
349
353
359
367
373
379
383
389
397
401
409
419
421
431
433
439
443
449
457
461
463
467
479
487
491
499
503
509
521
523
541
547
557
563
569
571
577
587
593
599
601
607
613
617
619
631
641
643
647
653
659
661
673
677
683
691
701
709
719
727
733
739
743
751
757
761
769
773
787
797
809
811
821
823
827
829
839
853
857
859
863
877
881
883
887
907
911
919
929
937
941
947
953
967
971
977
983
991
997
 

Dompteur

Top Contributor
Kleine Korrektur: Ich habe bei meinem Beispiel die Formel falsch gelesen.
Es wird natürlich nicht über die Potenzen iteriert, sondern über die Basis

Die Summierung sieht dann für beiuspielsweise n=4 so aus:
==> (1**a + 2**a + 3**a) mod 4 = 3
==> ( (1**a mod 4) + (2**a mod 4) + (3**a mod 4)) mod 4 = 3

Hinweise: Ich habe der Einfachheit halber statt "(n-1)" "a" einsetzt.

So wird beispielsweise aus (3**a mod 4) dann ( ( 3 mod 4 ) * (3 mod 4) * (3 mod 4) ) mod 4
oder auch ( ( ( ( 3 mod 4 ) * (3 mod 4) ) mod 4 ) * (3 mod 4) ) mod 4
 

Edinita

Mitglied
Also ich hab mich nochmal rangesetzt und versucht eure Tipps anzuwenden - es ist folgender Wirrwarr rausgekommen:
upload_2015-11-15_14-16-15.png

Hoffentlich checkt ihr einigermaßen was was sein soll ... hab versucht es mit Kommentaren etwas deutlicher zu machen.
Was schonmal gut ist, ist dass er jetzt Zahlen bis 1000 ausgibt und nicht wie vorher bei 5 aufhört, weil die Exponenten zu groß werden.
Nicht gut ist leider das Ergebnis.
Ich weiß der Code wirkt wahrscheinlich ziemlich wirr ^^ - hab mir aber lange Gedanken gemacht und versucht zunächst einmal alles ordentlich aufzuschreiben - und eigentlich hat es Sinn gemacht.

Vielleicht habt ihr noch einen Tipp?
Danke schonmal :)
 

Anhänge

  • GiugaNeu.txt
    573 Bytes · Aufrufe: 8

Edinita

Mitglied
Sind denn die Bedingungen bei den Schleifen überhaupt so richtig gewählt? Ich hab grad nochmal while Schleifen ausprobiert... aber da kommt dann noch mehr Unsinn raus :/
 

klauskarambulut

Bekanntes Mitglied
Es ist schon reichlich unverschämt zu schreiben, "habe eure Tipps angewendet" und dann sowas zu liefern.

Was ist so schwierig daran einfache Funktionen zu schreiben?

Schreibe einfach eine Funktion die "n hoch m" berechnet! (public static int pow(int base, int exp) {...})
Dann schreibst du etwas Code der die Funktion aufruft, das Ergebnis ausgibt und überprüfst dies.

Dies kannst du auch gerne bleiben lassen, aber dann solltest du auch das Programmieren sein lassen.
Schritt für Schritt vorgehen.

Und wenn du "n hoch m" kannst, dann schreibst du eine Funktion "(n hoch m) modulo k". (public static int modPow(int base, int exp, int mod) {...}
Aufrufen überprüfen, das ganze Prozedere.

Die Kommentare die du verwendest interessieren keinen. Bezeichner, die aus einem Buchstaben bestehen interessieren keinen. Ineinander verschachtelte Schleifen interessieren keinen.

Kleine Funktionen, die wohldefinierte Aufgaben erfüllen interessieren.

Screenshots interessieren keinen, wenn du was möchtest dann kopiere den Code und für ihn ein oder lass es bleiben.

Diesen Code schaut niemand an. Der Code wird kommentarlos gelöscht. Egal ob das richtige Ergebnis rauskommt oder nicht. Das ist Müll.

Kleine Funktionen, die wohldefinierte Aufgaben erfüllen!
 

Edinita

Mitglied
Also wie ich es ganz zu Anfang auch erwähnt habe, habe ich erst vor sehr kurzer Zeit - ungefähr 1 Woche - angefangen mich mit Java zu beschäftigen.

Außerdem handelt es sich hier um eine Aufgabe aus der Uni mit einer explizit formulierten Aufgabenstellung, bei der leider nicht nach deiner Funktion (public static int pow ..etc) gefragt ist. Vielmehr soll nur mit +, -, *, / und % gearbeitet werden und es geht allgemein um verschachtelte Schleifenanweisungen. Daher kann ich nicht einfach irgendwelche Funktionen, die ich irgendwoher habe dort mit einbringen.

Für mich ist das alles wie gesagt neu und ich habe noch einige Probleme, das ist trotzdem kein Grund so unfreundlich zu sein. Ich habe gedacht, dass man hier auch als Anfänger Fragen stellen darf, ohne halbwegs beleidigt zu werden..

Wenn dich meine Anfängerfehler so zur Weißglut bringen, dann kannst du meine Einträge auch gerne ignorieren..
 

strußi

Top Contributor
explizit formulierten Aufgabenstellung, bei der leider nicht nach deiner Funktion (public static int pow ..etc) gefragt ist. Vielmehr soll nur mit +, -, *, / und % gearbeitet werden und es geht allgemein um verschachtelte Schleifenanweisungen

es wird doch gesagt, schreibe eine Methode =Funktion mit den Parametern int base int exp
das was dann in die geschweiften klammern soll, ist der Teil wo das Hirn anfangen soll zu rauchen

schritt eins
summe von k bis n-1 von k^(n-1) =klarer fall für eine schleife
schritt zwei
nach der schleife summe durch Modulo n teilen und prüfen ob das ergebnis =n-1 ist
suchwörter: modulo java

==> (k**0 + k**1 + k**2 + k**3) mod 4 = 3
==> ( (k**0 mod 4) + (k**1 mod 4) + (k**2 mod 4) + (k**3 mod 4) ) mod 4 = 3


Die andere Aussage : (ab) mod m = (( a mod m) (b mod m)) mod m
hilft dir die Potenzen klein zu halten.

So wird beispielsweise aus (k**3 mod 4) dann ( ( k mod 4 ) * (k mod 4) * (k mod 4) ) mod 4
oder auch ( ( ( ( k mod 4 ) * (k mod 4) ) mod 4 ) * (k mod 4) ) mod 4

D.h.: Du kannst die Potenz in einer Schleife berechnen und dabei jedes Teilergebnis mod n nehmen. So bleibt dein Zwischenergebnis immer < n.

das gibt dir doch schon die lösung vor, das ganze nur noch so umschreiben, dass es in einer schleife funktioniert.
tipp: feste variablen sind nicht von schleifen betroffen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Zwischenablage ist nach Programm beenden leer Java Basics - Anfänger-Themen 9
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 45
tomzen Programm ignoriert in der Ausführung Code Java Basics - Anfänger-Themen 8
S Erstes Programm: Hallo Welt funktioniert nicht. Java Basics - Anfänger-Themen 3
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
M Java Mail Programm Java Basics - Anfänger-Themen 4
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
M Mini Jar-Programm Java Basics - Anfänger-Themen 51
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
M Das Programm stellt nichts dar Java Basics - Anfänger-Themen 2
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
Z Programm Ideen Java Basics - Anfänger-Themen 8
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
T Programm stürzt ab Java Basics - Anfänger-Themen 40
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
K Ist das Programm schlecht bzw. schlampig programmiert ? Java Basics - Anfänger-Themen 9
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
M Von Eclipse zum richtigen Programm Java Basics - Anfänger-Themen 1
nbergmann IntelliJ: Wie lade ich ein fertiges Programm aus dem Lehrbuch? Java Basics - Anfänger-Themen 26
D Anfängerfrage zu meinem Programm. Java Basics - Anfänger-Themen 15
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
Kydo Programm Beschreibung Java Basics - Anfänger-Themen 3
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 7
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
D JAVA Programm schreiben Java Basics - Anfänger-Themen 46
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
M Wo hält das Programm an? Java Basics - Anfänger-Themen 11
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
Fugover Kopfrechnen-Programm Java Basics - Anfänger-Themen 6
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
J selbst erstellte Datei mit Programm öffnen Java Basics - Anfänger-Themen 10
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
A wie kann ich es in meinem Programm rein tun Java Basics - Anfänger-Themen 8
S Fehler beim Programm Java Basics - Anfänger-Themen 2
Jose05 Fehler im Programm feststellen Java Basics - Anfänger-Themen 2
F Kann mir jemand kurz dieses Programm erklären? Java Basics - Anfänger-Themen 22
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
J Kann ich mein Programm so schreiben? Java Basics - Anfänger-Themen 4
A Lotto Programm Java Basics - Anfänger-Themen 3
S Programm erstellen Java Basics - Anfänger-Themen 3
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
J Interpreter-Fehler Programm gibt nicht gewünschtes Ergebnis aus Java Basics - Anfänger-Themen 11
brypa Programm mit Eingabe Java Basics - Anfänger-Themen 129
B Java Programm soll mit Python kommunizeren Java Basics - Anfänger-Themen 1
SpigBin Programm läuft nicht weiter... Java Basics - Anfänger-Themen 10
M JAVA Programm in Website einbinden Java Basics - Anfänger-Themen 19
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
B Programm beendet sich nicht und weiteres seltsames Verhalten Java Basics - Anfänger-Themen 9
N Eclipse Programm normal ausführen Java Basics - Anfänger-Themen 1
D Programm auf Enter warten lassen Java Basics - Anfänger-Themen 2
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
C Brauche Hilfe um ein Programm zu schreiben Java Basics - Anfänger-Themen 8
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
OSchriever Jar-Programm läuft auf Windows aber nicht auf Linux(Raspberri Pi4) Java Basics - Anfänger-Themen 22
G Programm Code Java Basics - Anfänger-Themen 5
CptK Achsenskalierung in Koordinatensystem hängt Programm auf Java Basics - Anfänger-Themen 5
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
TimoN11 Mail Programm mit Java? Java Basics - Anfänger-Themen 1
Sajeel Chattha Dieses Programm umschreiben Java Basics - Anfänger-Themen 5
J Programm beenden ohne System.exit() oder Runtime.exit() Java Basics - Anfänger-Themen 5
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
A Programm Histogram Java Basics - Anfänger-Themen 2
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
CT9288 Interaktion mit laufendem Programm -Fachbegriffe Java Basics - Anfänger-Themen 2
Gaudimagspam Assertions im Programm hinzufügen Java Basics - Anfänger-Themen 4
G Weiß jemand wie man dieses Programm schreibt? Java Basics - Anfänger-Themen 84
C Programm ausführen ohne JRE? Java Basics - Anfänger-Themen 3
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
N Best Practice How can I creat a programm with java under windows 10 in order to open an spreadsheet in libreoffice calc format Java Basics - Anfänger-Themen 11
W Programm dass Palindrome erkennt Java Basics - Anfänger-Themen 6
K Erste Schritte Programm geht aus Schleife, warum? Java Basics - Anfänger-Themen 2
P Wie für EIN Java Programm von 64bit Java (=Standard) auf 32bit Java Installation (Windows) umschalten? Java Basics - Anfänger-Themen 6
K Programm stoppt einfach ohne Grund Java Basics - Anfänger-Themen 4
M Rekursives Programm zum Anzeigen von Primzahlen Java Basics - Anfänger-Themen 3
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
Zrebna Programm kann aus der Konsole nicht gestartet werden (in der IDE läuft es) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben