Programma C per trovare il numero perfetto all'interno di un determinato intervallo

Programma C per trovare il numero perfetto all'interno di un determinato intervallo

Un numero si dice perfetto se la somma di tutti i suoi fattori, escluso il numero stesso, è uguale al numero. Ad esempio, considera il numero 6. I fattori di 6 sono 1,2,3 e 6. Ora, la somma di tutti i suoi fattori escluso il numero stesso è 1+2+3=6. Qui, poiché il numero originario è uguale alla somma di tutti i suoi fattori escluso il numero stesso, quindi è un numero perfetto.

Qui, in questo programma, ci viene assegnato un intervallo e il nostro compito è trovare tutti i numeri perfetti all'interno di quell'intervallo. Ma prima di andare avanti, se non hai familiarità con il concetto di loop in C, controlla l'articolo sui loop in C.

Input: Inserisci l'intervallo:1 100

Risultato: I numeri perfetti all'interno di quell'intervallo sono 6 28

Esistono due modi per risolvere questo problema:

Metodo 1:senza utilizzare le funzioni

Metodo 2:utilizzo delle funzioni

Diamo un'occhiata a ciascuno di questi metodi separatamente.

Programma 1:trova il numero perfetto all'interno di un determinato intervallo

In questo metodo vengono visualizzati i numeri perfetti all'interno di un determinato intervallo. Qui, nel metodo principale stesso, dichiariamo un intervallo e controlliamo tutti i numeri perfetti all'interno di quell'intervallo. Questo viene fatto utilizzando due cicli for e attraversando ciascun elemento e verificando la somma dei fattori per ciascun elemento.

Algoritmo:

  1. Inizia
  2. Dichiara due variabili per l'intervallo.
  3. Inizializza le due variabili.
  4. Utilizza due cicli for per verificare se un numero è perfetto o meno.
  5. Usa il primo ciclo for per contenere gli elementi. Questo ciclo for viene utilizzato anche per attraversare tutti gli elementi all'interno dell'intervallo specificato.
  6. Il secondo ciclo for itera gli elementi da 1 a quell'elemento e controlla la somma di tutti i suoi fattori escludendo il numero stesso.
  7. Se la somma di tutti i suoi fattori, escluso il numero stesso, è uguale al numero, allora è un numero perfetto.
  8. Tutti gli elementi che soddisfano le condizioni di cui sopra vengono stampati.
  9. Ferma

Di seguito è riportato il codice per lo stesso.

Il programma seguente mostra come stampare tutti i numeri perfetti all'interno di un determinato intervallo. Questo può essere fatto usando due cicli for. Il primo ciclo for conterrà l'elemento e il secondo ciclo for iterarà gli elementi da 1 a quell'elemento e verificherà la somma di tutti i suoi fattori. Se la somma di tutti i suoi fattori è uguale al numero stesso, allora è un numero perfetto.

// C program to print all Perfect numbers within a given range 
 
#include <stdio.h>

int main()
{
    int x, y, sum;    //Declare variables 

    /* Input lower and upper limit from user */
    printf("Enter the starting element of the range : ");
    scanf("%d", &x);    //Initialize the lower limit 
    printf("Enter the ending element of the range : ");
    scanf("%d", &y);    //Initialize the upper limit 

    printf("All Perfect numbers between %d to %d:\n", x, y);
    
    /* Iterate within the range to check for all the perfect numbers */
    for(int i=x; i<=y; i++)
    {
        sum = 0;    //Initialize the sum to zero for each element

        /* Check whether the current number i is Perfect number or not */
        for(int j=1; j<i; j++)
        {
            if(i % j == 0)
            {
                sum += j;
            }
        }
 
        /* If the sum of all its factor is equal to the number itself then it is a perfect number */
        if(sum == i)
        {
            printf("%d ", i);
        }
    }
    printf(" \n ");
    return 0;
}


Inserisci l'elemento iniziale dell'intervallo:1
Inserisci l'elemento finale dell'intervallo:1000
Tutti i numeri perfetti compresi tra 1 e 1000:
6 28 496

Programma 2:trova il numero perfetto all'interno di un determinato intervallo

In questo metodo, i numeri perfetti all'interno di un determinato intervallo vengono visualizzati utilizzando le funzioni. Qui dichiariamo due funzioni. La prima funzione verificherà se il numero dato è perfetto o meno e la seconda funzione stamperà i numeri se sono perfetti. La prima funzione utilizzerà due cicli for per verificare se il numero è perfetto o meno. E la seconda funzione utilizzerà un ciclo while per scorrere tutti i numeri perfetti e li stamperà.

Algoritmo:

  1. Inizia
  2. Dichiara due variabili per l'intervallo.
  3. Inizializza le due variabili.
  4. Chiama le funzioni per verificare se un numero è perfetto o meno.
  5. Usa due cicli for per lo stesso.
  6. Usa il primo ciclo for per contenere gli elementi. Questo ciclo for viene utilizzato anche per attraversare tutti gli elementi all'interno dell'intervallo specificato.
  7. Il secondo ciclo for itera gli elementi da 1 a quell'elemento e controlla la somma di tutti i suoi fattori escludendo il numero stesso.
  8. Se la somma di tutti i suoi fattori, escluso il numero stesso, è uguale al numero, allora è un numero perfetto.
  9. Tutti gli elementi che soddisfano le condizioni di cui sopra vengono stampati.
  10. Ferma

Di seguito è riportato il codice per lo stesso.

Il programma seguente mostra come stampare tutti i numeri perfetti all'interno di un determinato intervallo utilizzando le funzioni. Qui chiameremo due funzioni. La prima funzione verificherà se il numero dato è perfetto o meno e la seconda funzione stamperà i numeri se sono perfetti. Per verificare se un dato numero è perfetto o meno, vengono utilizzati due cicli for. Il primo ciclo for conterrà l'elemento e il secondo ciclo for iterarà gli elementi da 1 a quell'elemento e verificherà la somma di tutti i suoi fattori. Se la somma di tutti i suoi fattori è uguale al numero stesso, allora è un numero perfetto.

/* C program to print all perfect numbers in a given range using function  */
 
#include <stdio.h>

int checkPerfect(int num);                      // Function declarations 
void printPerfectNumber(int x, int y);     // Function declarations 

int main()
{
    int x, y;       //Range Declaration
    
    /* Input lower and upper limit to print perfect numbers */
    printf("Enter lower limit of the range: \n");
    scanf("%d", &x);      //Range Initialization
    printf("Enter upper limit of the range: \n");
    scanf("%d", &y);      //Range Initialization
    
    printf("\nAll perfect numbers between %d to %d are: \n", x, y);

    printPerfectNumber(x, y);      //Function Call
    
    return 0;
}

/*
    Check whether the given number is perfect or not.
    Returns 1 if the number is perfect otherwise 0.
 */
 
int checkPerfect(int num)               //Function Definition
{
    int i, sum;
    
    /* Finds sum of all proper divisors */
    sum = 0;
    for(i=1; i<num; i++)
    {
        if(num % i == 0)
        {
            sum += i;
        }
    }

    /*  If sum of proper positive divisors equals to given number then the number is perfect number  */
    if(sum == num)
        return 1;
    else
        return 0;
}



/* Print all the perfect numbers between the given range from starting to end */

void printPerfectNumber(int x, int y)                 //Function Definition
{
    /* Iterates within the given range from starting to end */

    while(x <= y)
    {
        if(checkPerfect(x))          //Function Call
        {
            printf("%d ", x);
        }
        
        x++;     //Increment for each iteration
    }   
}


Inserisci il limite inferiore dell'intervallo:1
Inserisci il limite superiore dell'intervallo:1000

Tutti i numeri perfetti compresi tra 1 e 1000 sono:
6 28 496