Blog yang menyediakan pelajaran, source code, dan artikel-artikel seputar pemrograman dan komputer.

Tuesday, June 7, 2011

Algoritma dan contoh program perfect number dalam C++ 2 (lanjutan..)

10:24 PM Posted by Vyn , 2 comments

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

2 comments:

catatan si rizky said...

Luar biasa ya akhi :)

Vyn said...

InsyAllah akhi,, :)