import javax.swing.JOptionPane; /* Accetta da tastiera una sequenza di numeri naturali * verificando se ciascuno di essi e' un numero perfetto * * Un numero e' perfetto se e' uguale alla somma di tutti i suoi * divisori incluso 1 ed escluso il numero stesso) */ public class Perfetti { static int leggiIntero(String messaggio) { int v = Integer.parseInt(JOptionPane.showInputDialog(messaggio)); return v; } static boolean testPerfetto(int n) { /* Questo metodo trova i divisori a coppie (uno minore ed uno maggiore * della radice quadrata del numero). * Prestare attenzione al divisore 1 ed al caso particolare in cui * il numero sia un quadrato */ int sommaDivisori = 1; int radice = (int)Math.sqrt(n); for(int d=2; d<=radice; d++) { if(n%d == 0) sommaDivisori = sommaDivisori + d + n/d; } if(n == radice*radice) sommaDivisori = sommaDivisori-radice; if(sommaDivisori==n) return true; else return false; } public static void main(String[] args) { int numero=leggiIntero("Digita un intero positivo"); while(numero>0) { if(testPerfetto(numero)) JOptionPane.showMessageDialog(null, numero + " e' perfetto"); else JOptionPane.showMessageDialog(null, numero + " non e' perfetto"); numero = leggiIntero("Digita un intero positivo"); } System.exit(0); } }