kaniuygun Geschrieben 16. Dezember 2007 Geschrieben 16. Dezember 2007 Ich habe ein Problem mit dem erstellen eines C++ Programms, da ich Anfänger bin und nicht so recht klar komme wollte ich mal schaun ob mir hier vielleicht einer weiterhelfen kann. Ich muss ein Programm in C++ entwickeln welches die ersten 13 befreundeten Zahlenpaare auf dem Bildschirm wiedergibt. Es sind ausschließlich einfache befehle zu verwenden die nur von Anfängern genutzt werden und es ist nicht erlaubt determinierte Schleifen -for()- zu nutzen. Wäre vielleicht auch sehr nett wenn ihr mir die von euch aufgeführten Schritte erklären könnt damit ich sie bei meinem Tutor auch verteidigen kann. Also soviel habe ich bis jetzt geschafft komme aber nciht weiter, wäre sehr gut wenn jemand helfen kann. #include <stdio.h> main() { int zahl1=10,zahl2,zaehler,divisor1,divisor2,summe1=0,summe2=0; do { do { divisor1=zahl1/2; if (zahl1%divisor1==0) summe1=summe1+divisor1; divisor1=divisor1-1; } while (divisor1>0); do { if (summe1%divisor2==0) summe2=summe1+divisor2; divisor2=divisor2-1; } while (divisor2>0); if (zahl2=summe2) printf("Hier sind die ersten 13 Zahlen: "); zaehler=zaehler+1; summe1=0; summe2=0; } while (zaehler<=13); } PS. Amicable numbers bzw. befreundete Zahlen sind die Zahlen die die selbe Anzahl von stellen haben und die Summe der Teiler der einen Zahl die andere ergibt z.B: 220 und 284 220=ist teilbar durch 110+55+44+22+20+11+10+5+4+2+1 diese Zahlen die Summe dieser Zahlen ergibt 284, und die ist teilbar durch 1+2+4+71+142 die Summer dieser Zahlen lautet nun 220, aufgabe des Programms ist es also die ersten 13befreundeten Zahlen zu finden. DANKE IM VORAUS FÜR EURE HILFE Zitieren
flashpixx Geschrieben 17. Dezember 2007 Geschrieben 17. Dezember 2007 Hallo, schau Dir mal den Wiki Artiekl Befreundete Zahl - Wikipedia an, dort steht eine passende Formel drin, die Dir die Zahlen berechnet. Zu beachten ist allerdings, dass Du nur Primzahlen verwenden darfst, d.h. Du musst die ersten 13 Primzahlen berechnen und dann von diesen die entsprechenden "Freunde". Wie man die Primzahlen berechnet findest Du hier Sieb des Eratosthene - Wikipedia Beides lässt sich mit For, als auch While Schleifen, einer Modulooperation und wenn man es schön machen will einem Array realisieren (das Array ist nicht zwingend) HTH Phil Zitieren
Klotzkopp Geschrieben 17. Dezember 2007 Geschrieben 17. Dezember 2007 schau Dir mal den Wiki Artiekl Befreundete Zahl - Wikipedia an, dort steht eine passende Formel drin, die Dir die Zahlen berechnet.Die Sätze von Thabit/Euler/Borho liefern nicht alle befreundeten Zahlen. Die Anwendung dieser Sätze löst nicht diese Aufgabe. kaniuygun, darfst du Funktionen benutzen? Und ist es sicher, dass es C++ sein soll? Dein Code sieht stark nach C aus. Zitieren
flashpixx Geschrieben 17. Dezember 2007 Geschrieben 17. Dezember 2007 Hallo, Die Sätze von Thabit/Euler/Borho liefern nicht alle befreundeten Zahlen. Die Anwendung dieser Sätze löst nicht diese Aufgabe. ich gehe davon aus, dass der Satz von Thabit die ersten 13 befreundeten Zahlen findet, da im Wiki Artikel angegeben ist, dass der Satz für n ≤ 191600 die Zahlen ermittelt. Mit Hilfe einer Lookup Tabelle der Primzahlen kann man dann somit die Zahlen berechnen. Phil Zitieren
Klotzkopp Geschrieben 17. Dezember 2007 Geschrieben 17. Dezember 2007 ich gehe davon aus, dass der Satz von Thabit die ersten 13 befreundeten Zahlen findet, da im Wiki Artikel angegeben ist, dass der Satz für n ≤ 191600 die Zahlen ermittelt.Das hast du falsch verstanden. Der Satz findet für n=2 das Paar (220, 284), für n=3 nichts, und n=4 das Paar (17296, 18416). Dazwischen fehlen schon 6 Paare. Das nächste Paar findet der Satz für n=7 (9.363.584, 9.437.056), das ist schon weit jenseits der Aufgabe. Und danach findet der Satz erst wieder frühestens für n=191600 etwas. Gesucht ist das hier: 220 284 1184 1210 2620 2924 5020 5564 6232 6368 10744 10856 12285 14595 17296 18416 63020 76084 66928 66992 67095 71145 69615 87633 79750 88730 Davon findet man mit Thabits Satz gerade mal 2 Paare. Zitieren
flashpixx Geschrieben 17. Dezember 2007 Geschrieben 17. Dezember 2007 Danke, hatte es nur überfolgen. Dann wäre es ja mal zu schauen nach welchen Verfahren "Herman te Riele" die Zahlen berechnet hat. Obwohl ich doch auch anmerken muss, dass es hier wohl eher um die Programmierung als um die mathematische Zusammenhänge geht. Ich denke man kann den Satz von Euler entsprechend als Grundlage verwenden und mit Hilfe der Primzahlen entsprechend prüfen. Also generell würde ich so vorgehen, dass ich nach Euler die beginnend bei 1 durchlaufe und prüfe ob die Zahlen x, y , z einen Teiler zwischen 1 < t < x-1 haben (analog y, z), denn dann sind sie nicht prim (geht ebenfalls über while-Schleife). Wenn sie prim sind, berechne ich die Zahlenpaare und gebe sie aus, inkrementiere einen Zähler für meine äußere while-Schleife bei der die Abbruchbedingung zaehler > 13 lautet Phil Zitieren
Klotzkopp Geschrieben 17. Dezember 2007 Geschrieben 17. Dezember 2007 Danke, hatte es nur überfolgen. Dann wäre es ja mal zu schauen nach welchen Verfahren "Herman te Riele" die Zahlen berechnet hat.Ich würde sagen, für diese konkrete Aufgabe reicht stumpfes Ausprobieren. Brute Force, sozusagen. Also generell würde ich so vorgehen, dass ich nach Euler die beginnend bei 1 durchlaufe und prüfe ob die Zahlen x, y , z einen Teiler zwischen 1 < t < x-1 haben (analog y, z), denn dann sind sie nicht prim (geht ebenfalls über while-Schleife). Wenn sie prim sind, berechne ich die Zahlenpaare und gebe sie aus, inkrementiere einen Zähler für meine äußere while-Schleife bei der die Abbruchbedingung zaehler > 13 lautetAuch Eulers Satz findet nicht alle Paare. Paar Nummer 2 und 7 wurden nicht von Euler, sondern erst viel später gefunden: Vollkommen, befreundet, gesellig Wie ich schon zu Anfang sagte: Diese Sätze helfen dir bei der Lösung dieser Aufgabe nicht. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.