Newsgroup: it.comp.lang.c++
Titolo: Numeri perfetti

Un numero Perfetto è tale se la somma dei suoi fattori è uguale al numero
stesso( escluso ovviamente il numero in questione).
Esempio
6=1*2*3 = 1+2+3 è un numero perfetto.
Ora io ho fatto la funzione perfetto:
int perfetto ( int num){
    int sum=0;
for ( int i=num-1 ; i > 0 ; i--)
    {
       if (num%i==0)
         sum+=i;
    }
if ((sum==num)) return num;
else return 0;
}
Se poi faccio una chiamata sui primi 1000 numeri, mi da solo il numero 6
come perfetto? Possibile ? L'algoritmo è pensato bene?
Fly

 
premesso che la funzione non l'ho provata, la proverò appena arrivo a casa, 
fino a 1000 non c'è solo il 6. c'è il 28 1, 2, 4, 7, 14, e la somma 1 + 2 + 4 
+ 7 + 14 = 28. , poi c'è 496 e poi 8128. ti posto anche un link interessante:  
http://mathforum.org/library/drmath/view/51516.html

"Metal_Lord" <P...@ziii.fooo?> ha scritto nel messaggio
news:Xns922CCB3C89...@195.31.190.131...

28 non è PERFETTO!!!
1+2+4+7+14 != 1*2*4*7*14
mentre 1+2+3=1*2*3=6
ciao , fly

 
il link l'hai letto?
Here are the first few perfect numbers:
6, 
28, 
496, 
8128, 
33550336, 
8589869056
, 
137438691328, 
2305843008139952128,
2658455991569831744654692615953842176,
191561942608236107294793378084303638130997321548169216,
e i link:
http://utenti.lycos.it/mate_fisica/matematica/teoria_numeri/numeri_perf_amic
.
htm
http://digilander.iol.it/ciclometria/I%20NUMERI%20PERFETTI.html
In aritmetica si dicono perfetti i numeri uguali alla somma di tutti i loro 
divisori , escluso il numero stesso . Sono numeri perfetti : 6= 1+2+3 
28=1+2+4+7+14 .

 6=1*2*3 = 1+2+3 è un numero perfetto.
Mi sa che sbagli regola anche perchè 496 è perfetto tuttavia 2*2*2*2*31 !=
2+2+2+2+31 o no?
8128=2*2*2*2*2*2*127 ma 2+2+2+2+2+2+127 non fa 8128...
Mi sa che l'unico è il 6 secondo la tua regola e pure per caso...
Ciao
--
----------------------------------------
Carlo Camarda
chiamac...@tiscalinet.it
]@#[ Anna I Love You ]#@[

 Ciao
infatti per stabilire se un numero è perfetto si usa la regola "i numeri 
perfetti sono i numeri uguali alla somma di tutti i loro divisori , escluso 
il numero stesso."
Quindi non si considera la moltiplicazione fra i divisori, ma solo la somma.
Ciao


Ho provato ora il tuo simpatico algoritmo.
A me funziona...
Ti posto il codice ma non ho fatto modifiche.
#include <cstdio>
int perfetto (int num){
    int sum=0;
    for ( int i=num-1 ; i > 0 ; i--)
    {
       if (num%i==0)
           sum+=i;
    }
    if ((sum==num)) return num;
    else return 0;
}
int main()
{
    for (int i = 0; i < 1000; i++)
        if (perfetto(i)) printf("%d\n", i);
    return 0;
}

 496,
Non solo, ma il programma che hai postato è corretto. Io ho copiato la tua
funzione e usato il seguente main() :
int main(int argc, char *argv[]) {
        int i, n = argc>1 ? atoi(argv[1]) : 1000;
        for(i=0; i<n; ++i)
                if (perfetto(i)) printf("%d\n",i);
        return 0;
}
e il prog funziona.

 Esempio
Sbagliato, un numero e' perfetto se e' scrivibile come somma dei suoi
divisori.
6, 28 sono i primi, infatti
6 = 1+2+3
28 = 1+2+4+7+14
Non si sa se siano tutti pari.
Saluti.


1 non e` perfetto, in quanto non e` scrivibile come somma dei suoi divisori
eccetto il numero stesso; l'unico divisore di 1 e` infatti lo stesso 1.
Ammesso anche 0 come divisore, comunque troveremmo
1 = 0+1
ma 1 non puo` figurare nella somma perche' e` il numero risultante.
Se cosi` non fosse, 1 sarebbe l' *unico* numero perfetto (gli attuali si
troverebbero tutti le rispettive somme raddoppiate).
Adieu,
-- 
Lestat de Lioncourt                               |          Ciro Mattia Gonano
  JabberID: 
les...@jabber.students.cs.unibo.it
    |    Undergraduate Student in
  ICQ#: 52631406                                  |         Computer Science at
  URL: 
http://www.CS.UniBO.It/~gonano
             |       University of Bologna
            <powered by Linux Slackware 8.1 on Kernel 2.4.18-xfs>