Un numero naturale n è perfetto se è uguale alla somma dei suoi divisori propri (n escluso).
Consulta Wikipedia: Numeri perfetti, numeri abbondanti/difettivi/amicabili/primi, …
Esempi
n |
Divisori propri |
Somma |
6 |
1, 2, 3 |
1+2+3 = 6 |
16 |
1, 2, 4, 8 |
1+2+4+8 = 15 |
28 |
1, 2, 4, 7, 14 |
1+2+4+7+14 = 28 |
Program Perfetti;
Var
n, i: LongInt;
Begin
ReadLn(n);
Somma:=1;
For i:=2 To N-1 Do
If(n mod i = 0) Then
Somma:=Somma+i;
Writeln(Somma = n);
Readln;
End.
Approfondimento
- Il ciclo può essere accorciato a n/2
- Avendo a disposizione la somma dei divisori propri di n si possono fare più valutazioni…
n |
Divisori propri |
Somma |
|
6 |
1, 2, 3 |
1+2+3 = 6 |
perfetto |
10 |
1, 2, 5 |
1+2+5 = 8 |
8 < 10, difettivo |
12 |
1, 2, 3, 4, 6 |
1+2+3+4+6 = 14 |
14 > 12, abbondante |
13 |
1 |
1 |
primo |
16 |
1, 2, 4, 8 |
1+2+4+8 = 15 |
15 = 16-1, lievemente difettivo |
28 |
1, 2, 4, 7, 14 |
1+2+4+7+14 = 28 |
perfetto |
Aggiungi opportunamente il codice
If(Somma = 1 ) Then Writeln('Primo ')
Else If(Somma < n-1) Then Writeln('Difettivo' )
Else If(Somma = n-1) Then Writeln('Lievemente difettivo')
Else If(Somma = n ) Then Writeln('PERFETTO' )
Else If(Somma = n+1) Then Writeln('Quasi abbondante' )
Else If(Somma > n+1) Then Writeln('Abbondante' )
Else Then Writeln('??? ERRORE ???' );