Aiuto programma numeri perfetti

di Anonimizzato7589 il
3 risposte
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

  • 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...
  • 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.
  • 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