Autor Beitrag
jackie05
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Di 31.03.09 16:29 
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?

ausblenden 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 > 0do 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 31.03.09 16:41 
Im einfachsten Fall so:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 31.03.09 16:44 
user profile iconjackie05 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 user profile iconKhas Lösung nicht erschließt, werde ich sie dir nennen:
ausblenden Delphi-Quelltext
1:
2:
3:
  s := random(8)+2
  a := s * (random(100)+1); // danke jakobwenzel ;)
  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


Zuletzt bearbeitet von F34r0fTh3D4rk am So 19.04.09 16:04, insgesamt 1-mal bearbeitet
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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


Zuletzt bearbeitet von jackie05 am Di 31.03.09 18:52, insgesamt 2-mal bearbeitet
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Di 31.03.09 18:48 
@user profile iconF34r0fTh3D4rk:
Fast:

ausblenden Delphi-Quelltext
1:
2:
3:
  s := random(8)+2
  a := s * (random(100)+1);
  b := s * (random(100)+1);

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 31.03.09 19:12 
aber natürlich, danke :D Schande über mich :roll:
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 31.03.09 19:24 
user profile iconjackie05 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Di 31.03.09 21:16 
user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjackie05 hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.