/* verifica se un naturale in input e' primo * versione efficiente */ import javax.swing.JOptionPane; public class PrimalitaEfficiente { public static void main(String[] args) { long n, divisore; long maxDiv; boolean trovatoDivisore; String s = JOptionPane.showInputDialog("Digita un intero positivo"); n = Long.parseLong(s); /* se esistono divisori allora almeno uno e' <= della radice di n * Il metodo sqrt restituisce un double, e la conversione a long * potrebbe introdurre troncamenti * E' quindi opportuno aggiungere 1 a maxDiv */ maxDiv = (long) Math.sqrt(n) + 1; divisore = 2; trovatoDivisore = false; while(divisore <= maxDiv) { if((n%divisore) == 0) { trovatoDivisore = true; } divisore++; } if(trovatoDivisore) JOptionPane.showMessageDialog(null, "Il numero " + n + " e' composto."); else JOptionPane.showMessageDialog(null, "Il numero " + n + " e' primo."); System.exit(0); } }