Zum Inhalt springen

C++ Amicable Numbers


kaniuygun

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 lautet
Auch 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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...