C :: Aufgabe #49

2 Lösungen Lösungen öffentlich

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.

Lösungen:

vote_ok
von devnull (8870 Punkte) - 09.09.2014 um 19:14 Uhr
Quellcode ausblenden C-Code
/***********************************
 * 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;
}
vote_ok
von kathleenw (3600 Punkte) - 03.07.2020 um 09:54 Uhr
Quellcode ausblenden C-Code
#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');
        
}