Perfekte Zahlen berechnen

reavez

Gesperrt
hallo,

Eine Zahl soll eingegeben werden und das Programm soll berechnen ob die eingegebene Zahl eine perfekte Zahl ist.
Eine Perfekte zahl ist zb. 6 = 3+2+1, also ohne rest).

Eigentlich sollte das eh kein Problem sein, aber zum Algorithmus komm ich nicht.

Dann steht noch in der Angabe, dass man ein Hauptprogramm implementieren muss, das vom Benutzer eine Zahl als Obergrenze einliest und dann alle perfekten Zahlen bis zu diesem Grenzwert berechnet.
was ist da gefragt?
 
Re: Bräuchte eure Hilfe

zum ersten problem:

Code:
 int zahl; 
int i;
int j=0;
...							 /*zahl einlesen über konsole, edit-feld, oder ähnliches
for(i=1;j<=zahl;i++)
   j=j+i;
if (j==zahl)
   ...						 /*Ausgabe: perfekte Zahl
   else ...				  /*Ausgabe: keine perfekte Zahl
 
Re: Bräuchte eure Hilfe

versteh ich das richtig, dass das lauter Fakultäten sind?
1 = 1
3 = 1 + 2
6 = 1 + 2 + 3
10 = 1 + 2 + 3 + 4
...
afaik gibts dafür ne Funktion in C.
 
Re: Bräuchte eure Hilfe

hallo,

ich habe die angabe falsch formuliert.
ich gib eine zahl ein, und das programm nennt mir daraus alle perfekte zahlen.
zb. geb ich 6 ein, dann kommt 6.
wenn ich zb. 2564 eingebe, soll er daraus die perfekten zahlen berechnen
 
Das sollte es tun:

Code:
#include <iostream>

using namespace std;

int main(){

        int n = 0;
        int zw_su = 1;

        cin >> n;

        for(int tester = n; tester > 1; tester--){
                
                for(int teiler = 2; (teiler * teiler) < tester; teiler++)
                        if(tester % teiler == 0)
                                zw_su += teiler + tester/teiler;
                if(zw_su == tester)
                        cout << tester << " is a perect number!" << endl;
                zw_su = 1;
        }
}

Zu beachten ist die quadratische Komplexität die aber insofern verbessert wird,
da in der inneren Schleife immer nur bis sqrt(tester) überprüft wird.

Gruß

RedWing

P.S. Def. Perfekter Zahlen: http://de.wikipedia.org/wiki/Perfekte_Zahl
 
RedWing hat gesagt.:
Das sollte es tun:

Code:
#include <iostream>
 
using namespace std;
 
int main(){
 
int n = 0;
int zw_su = 1;
 
cin >> n;
 
for(int tester = n; tester > 1; tester--){
 
for(int teiler = 2; (teiler * teiler) < tester; teiler++)
if(tester % teiler == 0)
zw_su += teiler + tester/teiler;
if(zw_su == tester)
cout << tester << " is a perect number!" << endl;
zw_su = 1;
}
}

Zu beachten ist die quadratische Komplexität die aber insofern verbessert wird,
da in der inneren Schleife immer nur bis sqrt(tester) überprüft wird.

Gruß

RedWing

P.S. Def. Perfekter Zahlen: http://de.wikipedia.org/wiki/Perfekte_Zahl

hallo, danke für deine hilfe aber ich muss in c programmieren.
dein ansatz ist für c++
 
Code:
hallo, danke für deine hilfe aber ich muss in c programmieren.
dein ansatz ist für c++

Dann nimm halt anstatt <iostream> <stdio.h> daher
und dementsprechend für cout eine printf() Funktion


Gruß

RedWing
 

Neue Beiträge

Zurück