C :: Aufgabe #49 :: Lösung #1
2 Lösungen
#49
vollkommene Zahl (Mathematisches Problem)
Anfänger - C
von bibir
- 03.09.2014 um 08:21 Uhr
Man nennt eine natürliche Zahl N "vollkommen", wenn die Summe aller echten Teiler von N gleich N ist.
Zum Beispiel ist 28 eine vollkommene Zahl, da 1 + 2 + 4 + 7 + 14 = 28 ist.
Schreibe ein Programm/Skript, das beliebig oft eine Zahl N (mit 0 < N < 100000) einliest und feststellt, ob N eine vollkommene Zahl ist. Falls ja, soll das Programm N und die zugehörenden echten Teiler ausgeben, andernfalls ist nur N und die Meldung "ERFUELLT DIE BEDINGUNG NICHT" zu drucken.
Zum Beispiel ist 28 eine vollkommene Zahl, da 1 + 2 + 4 + 7 + 14 = 28 ist.
Schreibe ein Programm/Skript, das beliebig oft eine Zahl N (mit 0 < N < 100000) einliest und feststellt, ob N eine vollkommene Zahl ist. Falls ja, soll das Programm N und die zugehörenden echten Teiler ausgeben, andernfalls ist nur N und die Meldung "ERFUELLT DIE BEDINGUNG NICHT" zu drucken.
#1
von devnull (8870 Punkte)
- 09.09.2014 um 19:14 Uhr
/***********************************
* vzahl.c vollkommene Zahl
***********************************/
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
int main(int argc, char **argv) {
unsigned long at[MAX];
unsigned long N, t, sum;
int i, j;
if (argc > 1)
N = atol(argv[1]);
else {
printf("Eingabe Zahl: ");
scanf("%lu", &N);
}
// Teiler bestimmen
for (i=0, t=1; t<=N/2; t++)
if (N%t == 0) at[++i] = t;
// Teilersumme pruefen
for (j=1,sum=0; j<=i; j++)
sum += at[j];
if (sum == N) {
printf("%lu ist eine vollkommene Zahl: ", N);
printf("%lu", at[1]);
for (j=2; j<=i; j++)
printf("+%lu", at[j]);
printf("=%lu\n", N);
} else
printf("%lu erfuellt die Bedingung nicht.\n", N);
return 0;
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
