Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77

    [C++] Programma per il calcolo dei numeri perfetti

    Salve!
    Ho realizzato per esercizio un programma che calcoli un numero prestabilito di numeri perfetti (numeri i cui divisori sommati danno il numero stesso).
    Il codice è il seguente:

    codice:
    /*Programma per il calcolo di N numeri perfetti con N arbitrario*/
    
    #include <stdio.h>
    
    main()
    {
          /*Dichiarazione variabili*/
          int n, i, k, cont, somma;
          
          /*Lettura N*/
          printf("Quanti numeri primi devo trovare?\n");
          scanf("%d", &n);
          i=0;
          
          /*Ricerca numeri perfetti*/
          cont=0;
          k=0;
          do {
          i++;
          somma = 0;
          for(k=1; k <= i/2; k++) {
          if((i % k) == 0)
          somma += k;
          }
          if(somma == i){
          printf("\n%d", &i);
          cont++;
          }
          } while(cont <= n);
          scanf("%d", &n);
          return(0);
    }
    Tuttavia mi da come output semplicemente:
    2293616
    2293616
    2293616

    Dov'è l'errore?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Scusa ... ma l'output corretto quale dovrebbe essere ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    A seconda del numero stabilito, una serie di numeri perfetti.
    Se ad esempio si inserisce 10, dovrebbe restituire i primi 10 numeri perfetti.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465

    Re: [C++] Programma per il calcolo dei numeri perfetti

    Ma chiedi quanti numeri "primi" devi trovare e poi vuoi i numeri "perfetti"?

    A parte che, come ti e' stato fatto notare, non arriverai neanche al sesto numero ...

    P.S. In ogni caso il problema dovrebbe essere in

    printf("\n%d", &i);

    che dovrebbe essere

    printf("\n%d", i);

    dato che non e' una scanf ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    77
    Giusto! Grazie..
    Per quanto riguarda il fatto dei numeri primi, ho sbagliato a scrivere xD

    Comunque sia, era un esercizio dato, non conta quanti ne riesca a trovare ma che sia scritto correttamente..

  7. #7
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    sfruttando le proprietà note dei numeri perfetti è uscito questo
    codice:
    #include <stdio.h>
    #include<math.h>
    bool primo(int n) {
         int b=2;
      for(b = 2; b<=trunc(sqrt(n)); b++)
        if(n%b == 0) {
          return false;
        }
      return true;
    }
    
    int Pow(int x) {return (int)pow(2,(double)x);}
    
    long Perfect(int n) {
         if(primo(Pow(n+1)-1)==true) return Pow(n)*(Pow(n+1)-1);
         return 0;
    }
    main()
    {
          int i=0,it=0,cont;
          long num;
         scanf("%d",&cont);
          
         while(it<=cont){
                     i++;
    
                     if((num=Perfect(i))>0){it++;printf("%d\n",num);}
                           }       
         getchar();
         getchar();
    }
    o la versione con la successione dell'OEIS (da wikipedia)

    codice:
    #include <stdio.h>
    #include<math.h>
    int Pow(int x) {return (int)pow(2,(double)x);}
    
    long Perfect(int n) {
         return Pow(n-1)*(Pow(n)-1);
    
    }
    int main(){
        int i,n[]={2, 3, 5, 7, 13, 17, 19, 31, 61, 89};
        for(i=0;i<6;i++)
        printf("%d\n",Perfect(n[i]));
        
        getchar();
    }
    ma ovviamente non vanno oltre il quinto numero, per come la vedo io questo è un altro esempio di esercizio dato da un prof la cui ignoranza è da denuncia

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    59
    ma l'esercizio era ovviamente trovare un metodo di calcolo per i grandi numeri, non scrivere l'algoritmo :-D
    http://www.codeproject.com/KB/cpp/largenumber.aspx
    http://gmplib.org/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.