Algoritma perfect number pertama bisa jadi lebih efisien (mengurangi kalkulasi) dengan menghitung batas pembagi yang lebih tepat. Contohnya bilangan 100, bilangan ini habis dibagi 1 sehingga jumlah bernilai 1. Seratus habis dibagi 2 dengan hasil 50, kedua nilai ini ditambahin ke dalam jumlah sehingga jumlah yang awalnya bernilai 1 jadi bernilai 53. Sampai tahap ini seakan-akan kita sudah menguji bilangan 100 tadi dengan pembagi: 1, 2, 50, 51, 52, ..., 100. Dengan demikian pembagi-pembagi selanjutnya adalah 3,4,5,...,49 atau dengan kata lain batas pembagi menjadi 49. (wow,, thats great!)
Selanjutnya, pada pengujian dengan pembagi bilangan 4 ternyata tu bilangan 4 habis membagi 100 dengan hasil 25. Empat dan 25 ditambahin kepada jumlah sehingga jumlah nilainya nambah lagi jadi 82. Sampai tahap ini seakan-akan kita sudah menguji bilangan 100 dengan pembagi: 1, 2, 3, 4, 25, 26, ..., 100. (WAH!! KEREN!! :o) Dengan demikian pembagi-pembagi selanjutnya adalah 5, 6, 7, ..., 24, dengan kata lain batas pembagi menjadi 24. (assseeeekkk,,, lanjut gan!)
Tabel dibawah ini memperlihatkan bahwa untuk menguji bilangan 100 hanya diperlukan 10 kali pengujian. Coba bandingin dengan algoritma sebelumnya yang memerlukan 50 kali pengujian (mantep tho,, wenak tho,,). Hal yang harus diperhatikan adalah apabila bilangan pembagi habis membagi 100 dengan hasil bilangan pembagi itu juga (sama), maka hanya bilangan pembagi saja yang ditambahkan ke dalam jumlah. (0.o? maksudnya??) liat baris terakhir tabel biar lebih jelas. Noh:
Pembagi | Hasil bagi | Jumlah | Batas pembagi |
1 | 100 | 1 | 100 |
2 | 50 | 1+2+50=53 | 49 |
3 | - | 53 | 49 |
4 | 25 | 53+4+25=82 | 24 |
5 | 20 | 82+5+20=107 | 19 |
6 | - | 107 | 19 |
7 | - | 107 | 19 |
8 | - | 107 | 19 |
9 | - | 107 | 19 |
10 | 10 | 107+10=117 | 9 |
=================================================
Algoritma >> apakah n perfect number?
Jumlah <- 1
Batas <- n
Pembagi <- 2
Ulangi selama pembagi <= batas
Jika n mod pembagi = 0
Jumlah <- jumlah + pembagi
Hasil <- n/ pembagi
Jika hasil ≠ pembagi
Jumlah <- jumlah +hasil
Akhir jika
Batas=hasil-1
Akhir jika
Pembagi <- Pembagi+1
Akhir perulangan
Jika jumlah = n
n adalah perfect number
selain itu
n bukan perfect number
akhir jika
==================================================
coding:
Download contoh programnya disini:
Download Program