Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zahlen für ggT generieren?
jackie05 - Di 31.03.09 16:29
Titel: Zahlen für ggT generieren?
Hallo,
ich habe bei mir im Programm eine Funktion eingebaut, mit dem ich ggT berechnen kann, aber der Computer generiert mir oft Zahlen, indem der größte gemeinsame Teiler 1 ist und das ist dof.
Wie kann ich die Zahlen so generieren, das der größte gemeinsame Teiler > wie 1 ist?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| function ggT(a, b: Integer): Integer; begin if (b > a) then begin Result := a; a := b; b := Result; end; while (b > 0) do begin Result := a mod b; a := b; b := Result; end; Result := a; end;
procedure NewggT(); begin randomize; ggTZahlA := random(100)+1; ggTZahlB := random(100)+1; Form1.lblggT.Caption := 'Bestimme den größten gemeinsamen Teiler von '+IntToStr(ggTZahlA)+' und '+IntToStr(ggTZahlB); ggTErgebnis := ggT(ggTZahlA, ggTZahlB); Form1.edtggT.Clear; end; |
Ich bedanke mich schonmal im Voraus.
MfG
F34r0fTh3D4rk - Di 31.03.09 16:41
Im einfachsten Fall so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| while ggT(a, b) = 1 do begin a := random(100)+1; b := random(100)+1; end; |
oder halt nur eine der beiden Zahlen neu generieren (wobei das nicht funktioniert, wenn die andere eine Primzahl ist. Das würde zu einer unschönen Endlosschleife führen ;) )
mfg
Kha - Di 31.03.09 16:44
jackie05 hat folgendes geschrieben : |
| Wie kann ich die Zahlen so generieren, das der größte gemeinsame Teiler > wie 1 ist? |
Du wählst eine zufällige Zahl c. Wie könntest du nun wohl zu zwei Zahlen a und b kommen, sodass ggT(a, b) (mindestens) c ist ;) ?
jackie05 - Di 31.03.09 18:26
Ich bekomme immer Zufallszahlen, indem keine gemeinsame Teiler hineinpassen außer die Zahl 1.
Das möchte ich verbessern, das auch irgendwie Zufallszahlen kommen, indem auch mal eine andere Zahl hineinpasst außer immer nur die 1.
Gibt es dafür vieleich irgendwelche Algorithmus um die Zahlen so zu generieren?
Beispiel:
Bestimme den größten gemeinsamen Teiler von 24 und 60. (12)
Bestimme den größten gemeinsamen Teiler von 12 und 78. (6)
Bestimme den größten gemeinsamen Teiler von 20 und 5. (5)
Bestimme den größten gemeinsamen Teiler von 40 und 65. (5)
und nicht Zahlen wie z.B. diese:
Bestimme den größten gemeinsamen Teiler von 93 und 8. (1)
Bestimme den größten gemeinsamen Teiler von 31 und 22. (1)
Bestimme den größten gemeinsamen Teiler von 8 und 27. (1)
Bestimme den größten gemeinsamen Teiler von 97 und 68. (1)
Danke schonmal.
MfG
jaenicke - Di 31.03.09 18:29
Mach eine Primzahlzerlegung und benutze mindestens einen der Faktoren. Welchen kannst du ja zufällig auswählen.
Ist das für eine bestimmte Anwendung?
F34r0fTh3D4rk - Di 31.03.09 18:32
Ich weiß eigentlich nicht, warum du nochmal nachfragst, du hast doch schon zwei Lösungen bekommen :!:
Wenn sich dir
Khas Lösung nicht erschließt, werde ich sie dir nennen:
Delphi-Quelltext
1: 2: 3:
| s := random(8)+2; a := s * (random(100)+1); b := s * (random(100)+1); |
denke das war gemeint ;) Die beiden Zahlen haben dann auf jedenfall den gemeinsamen Teiler s(>1). In meinem Beispiel sind das die Zahlen 2 bis 9. Statt der 8 kannst du natürlich noch eine andere Zahl auswählen um einen größeren Wertebereich abzudecken.
mfg
jackie05 - Di 31.03.09 18:48
Danke Dir.
Ich Programmiere ein Mathematik Programm mit viele verschiedene Rechenoptionen.
Wenn ich z.B. die erste Zahl in Primzahl zerlege z.B.
84 = 1,2,3,4,6,7,12,21,28,42,84
und dann soll ich davon irgendeine Zahl nehmen und beim 2ten Zahl mehrfach mal nehmen Beispiel:
12*8 = 96
ZahlA = 84 ZahlB = 96
der gemeinsame Teiler wäre dann die Zahl 12
So könnte ich es dann machen? oder gibt es noch bessere Wege?
Edit: @F34r0fTh3D4rk Danke Dir, ich werde es mal versuchen.
Vielen Dank für die antworten.
MfG
jakobwenzel - Di 31.03.09 18:48
@
F34r0fTh3D4rk:
Fast:
Delphi-Quelltext
1: 2: 3:
| s := random(8)+2; a := s * (random(100)+1); b := s * (random(100)+1); |
F34r0fTh3D4rk - Di 31.03.09 19:12
aber natürlich, danke :D Schande über mich :roll:
JayEff - Di 31.03.09 19:24
jackie05 hat folgendes geschrieben : |
Wenn ich z.B. die erste Zahl in Primzahl zerlege z.B.
84 = 1,2,3,4,6,7,12,21,28,42,84 |
Äh, bitte? :shock: Wo sind denn da Primzahlen ausser 2, 3 und 7?
jackie05 - Di 31.03.09 21:16
JayEff hat folgendes geschrieben : |
jackie05 hat folgendes geschrieben : | Wenn ich z.B. die erste Zahl in Primzahl zerlege z.B.
84 = 1,2,3,4,6,7,12,21,28,42,84 | Äh, bitte? :shock: Wo sind denn da Primzahlen ausser 2, 3 und 7? |
Ups, Sry, hab da was verwechselt :twisted:
MfG
BenBE - Mi 01.04.09 10:46
Man kann aber auch einfach den Algorithmus für die Berechnung des ggT umkehren und ausgehend von einem gemeinsamen Teiler zufällig zwei Zahlen a und b generieren, die mindestens diesen Teiler aufweisen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!