C :: Aufgabe #49
2 Lösungen
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.
Lösungen:
/***********************************
* 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;
}
#include <stdio.h>
int main()
{
long zahl, summe;
int i, anzahl_teiler;
char beenden;
int teiler[100];
summe = 0;
anzahl_teiler = 0;
do {
printf("Welche Zahl zwischen 0 und 100000 soll auf Vollkommenheit geprüft werden: ");
scanf("%ld", &zahl);
fflush(stdin);
for (i=1;i<=(zahl/2);i++) {
if (zahl % i == 0) {
summe = summe + i;
teiler[anzahl_teiler] = i;
anzahl_teiler++;
}
}
if(summe == zahl){
printf("\nDie Zahl ist vollkommen.\n");
printf("Die Zahl hat %d Teiler.\n", anzahl_teiler);
printf("Folgende Teiler hat die Zahl: ");
for (i=0;i<anzahl_teiler;i++)
printf("%d ", teiler[i]);
printf("\n");
}
else
printf("\nDie Zahl %ld ist nicht vollkommen.\n", zahl);
printf("Noch einmal? j/n ");
scanf("%c", &beenden);
fflush(stdin);
}while(beenden=='j');
}
