My first Magazine pemrograman-kompetitif-dasar | Page 23

2.2 Bilangan Prima Terdapat solusi uji keprimaan yang √ lebih cepat √ daripada O(N). Manfaatkan observasi bahwa jika N = a × b, dan a ≤ b, maka a ≤ N dan b ≥ N. Kita tidak perlu memeriksa b; seandainya √ N habis dibagi b, tentu N habis dibagi a. Jadi kita hanya perlu memeriksa hingga N. Jadi √ kompleksitas waktunya adalah O( N). Solusi ini dapat dilihat pada Algoritma 4. Algoritma 4 Uji keprimaan dengan melakukan pengecekan dari 2 sampai 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: function IS P RIME S QRT (N) if N ≤ 1 then return f alse end if i ← 2 while i × i ≤ N do if N mod i = 0 then return f alse end if i ← i + 1 end while return true end function 2.2.2 √ N. . Pertidaksamaan ini ekuivalen dengan i ≤ √ N Pembangkitan Bilangan Prima (Prime Generation ) Aktivitas untuk mendapatkan bilangan-bilangan prima disebut dengan pembangkitan bilangan prima. Misalnya, kita ingin mengetahui himpunan bilangan prima yang tidak lebih daripada N. Pembangkitan Prima Menggunakan Iterasi Solusi sederhana dari pembangkitan bilangan bilangan prima adalah dengan iterasi dan uji keprimaan, seperti yang tertera pada Algoritma 5. Algoritma 5 Pembangkitan Bilangan Prima dengan iterasi dan uji keprimaan. 1: 2: 3: 4: 5: 6: 7: 8: 9: function SIMPLE P RIME G ENERATION (N) primeList ← {} for i ← 2, N do if IS P RIME S QRT (i) then primeList ← primeList ∪ {i} end if end for return primeList end function Pada metode pembangkitan bilangan prima menggunakan iterasi, kita akan menguji kepri- maan setiap angka √ dari 2 hingga N. Uji keprimaan √ √ suatu bilangan X yang mana X ≤ N memiliki kompleksitas O( X). Kita tahu bahwa X ≤ N, dan kita akan √ melakukan pengujian prima sebanyak N bilangan. Maka kompleksitas akhirnya adalah O(N N). 13