Aiuto programma numeri perfetti

di il
3 risposte

Aiuto programma numeri perfetti

Dunque mi si chiede di costruire un programma in grado di poter verificare se un numero immesso sia perfetto...io ho interpretato l'equazione di euclide in questo senso..ma..non ci siamo...comunque:


#include <stdio.h>
#include <conio.h>

int integerPower(int);

main()
{
      int numero, risposta;
      
      printf("Inserisci il numero da controllare se perfetto: ");
      scanf("%d", &numero);
      
      risposta = integerPower(numero);
      
      if(risposta == 1){
                  
        printf("\n\nIl numero %d e' perfetto!", numero);
        
        }
      getch();
      }
      
      int integerPower(int verificare){
          
          int counter, ciclo1, ciclo2, euclide, i, y;
      
          counter = 0;
          
          while(counter = 0){
                        
               i = 1;
               y = 1;
               ciclo1 = 1;
               
          while(i <= y){
                  
               ciclo1 *= 2;
               
               i++;
               }
               
               ciclo2 = 2;
          
          while(i <= y){
                  
               ciclo2 *= 2;
               
               i++;
               }
          
          euclide = ciclo1 * (ciclo2 - 1);
          
          if(euclide == verificare){
                     
            counter = 1;
            
            }
          
          else
          {
              counter = 0;
              
              i++;
              
              y++;
              
              }
              }
          return 1;
          }

ovviamente ad ogni riavvio del ciclo counter, tutto ritorna come dopo il primo ciclo...non so..come modificare sta cosa...

3 Risposte

  • Re: Aiuto programma numeri perfetti

    Non capisco la spiegazione del tuo codice...insomma...non è l'equazione che ho trovato dove mi hai indicato ieri...ora se questo è un modo alternativo..se non è troppo...avere una spiegazione...tra questa equazione 2^n*(2^(n+1) - 1)...e il tuo procedimento...
  • Re: Aiuto programma numeri perfetti

    Lascia stare, erano delle prove che stavo faccendo ma non riporta.
    Edit:
    
    int IsPerfect(int number)
    {
    	int sum=0;
    	
    	for(int i=1;i<=number/2;i++)
    	{
    		if(number%i==0)
    			sum+=i;
    	}
    	if(sum==number)
    		return 1;
    	return 0;
    }
    
    verifica se la somma dei divisori del numero è uguale al numero stesso come dice la definizione del numero perfetto.
  • Re: Aiuto programma numeri perfetti

    Ok..il codice l'ho capito ma...nel mio che ho scritto, per l'equazione in cui 2^n * (2^(n+1) - 1)...
    
    
    #include <stdio.h>
    #include <conio.h>
    
    int integerPower(int);
    
    main()
    {
          int numero, risposta;
          
          printf("Inserisci il numero da controllare se perfetto: ");
          scanf("%d", &numero);
          
          risposta = integerPower(numero);
          
          if(risposta == 1){
                      
            printf("\n\nIl numero %d e' perfetto!", numero);
            
            }
          getch();
          }
          
          int integerPower(int verificare){
              
              int counter, ciclo1, ciclo2, euclide, i, y;
          
              counter = 0;
              ciclo1 = 1;
              ciclo2 = 2;
              
              while(counter = 0){
                            
                   i = 1;
                   y = 1;
                   
              while(i <= y){
                      
                   ciclo1 *= 2;
                   
                   i++;
                   }
              
              while(i <= y){
                      
                   ciclo2 *= 2;
                   
                   i++;
                   }
              
              euclide = ciclo1 * (ciclo2 - 1);
              
              if(euclide == verificare){
                         
                break;
                
                }
              
                  i++;
                  
                  y++;
                  
                  }
                  return 1;
              }
    
    è fattibile cosi?
Devi accedere o registrarti per scrivere nel forum
3 risposte