Programın zaman karmaşıklığını (time complexity) çok küçük bi değişiklikle O(N)'den O(sqrt(N))'e düşürmek mümkün:
package capanornek;
//import java.util.Arrays;
import javax.swing.JOptionPane;
//import javax.swing.JScrollPane;
//import javax.swing.JTextArea;
/**
*
* @author Emre ÇAPAN
*/
public class CapanOrnek{
public static void main(String[] args) {
int sayi = Integer.parseInt(JOptionPane.showInputDialog("Bir Sayı Giriniz")); // Ekrana mesaj kutusu ile değer alalım
int toplam=0;
for (int i = 1; i * i <= sayi; i++) { // Döngü 1 den başla, sayının köküne kadar döngüyü çalıştır
if (sayi % i ==0) {// Sayının i'inci sayı ile modu 0 ise
toplam+=i;//toplam değişkenine i değerini at
if (i * i != sayi) // i sayının tam kökü değilse sayi / i bölümünü de toplama ekle
toplam += sayi / i;
}
}
if (sayi==toplam) {// eğer girilen sayı döngüdeki bölümlerin toplamına eşitse
JOptionPane.showMessageDialog(null, sayi+" Mükemmel Sayıdır");
}
else // Değilse
JOptionPane.showMessageDialog(null, sayi+" Mükemmel Sayı Değildir");
}
}