Contoh Soal & Pembahasan

apalagi jika waktu eksekusi lebih dibatasi jelas

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: ngan pembentuk N! Bilangan yang berisi faktor 5 adalah bilangan‐bilangan kelipatan 5 saja jadi cukup kita memperhatikan bilangan‐bilangan kelipatan 5 ini. Misalnya dalam 10! hanya ada dua bilangan yang memiliki faktor 5 yaitu 5 dan 10 sendiri sehingga. Contoh lain, dalam 29! ada 5, 10, 15, 20, 25 yang berisi faktor 5, dan karena pada 25 faktor 5 muncul dua kali menyebabkan 29! berisi kemunculan faktor 5 sebanyak 6 kali (jadi ada 6 nol di belakang 29!). Dengan mengiterasi i dari 5 ke N dengan kelipatan 5, dan mendapatkan berapa banyak faktor 5 dari bilangan i, lalu menjumlahkannya, maka anda dapat menjawabnya dengan baik... untuk level OSN 2006 ini! i := 5; count := 0; while i <= N do begin // menghitung berapa banyak kemunculan faktor 5 dalam i j := i; while (j mod 5) = 0 do begin j := j div 5; count := count + 1; Dikutip dari http://www.toki.or.id/archive/faktorialsolusi.html 2 Tim Olimpiade Komputer Indonesia halaman 29 Contoh Soal Olimpiade Sains Nasional Bidang Komputer dan Pembahasan end; i := i + 5; end; Untuk tingkat OSN ini dengan cara demikian Anda dapat memperoleh nilai penuh. NAMUN, untuk tingkat lebih lanjut mungkin harga N bisa diberikan jauh lebih besar misalnya N = 1012, algoritma harus beriterasi luar (while) sebanyak 2.1011 kali ‐‐ dan untuk setiap harga i akan diperlukan sekian kali lagi beriterasi untuk menghitung banyaknya faktor 5 dalam i yang akhirnya akan memerlukan waktu komputasi yang besar!. Apalagi jika waktu eksekusi lebih dibatasi jelas solusi tersebut tidak akan memberikan nilai penuh. Untuk itu Anda harus menggali ide lebih lanjut lagi… Perhatikan bahwa: • • • • bilangan‐bilangan berfaktor 5 adalah semua bilangan kelipatan 5. Jika J1 adalah jumlah bilangan kelipatan 5 yang ≤ N tersebut maka J1 = N div 5. di antara bilangan‐bilangan itu terdapat bilangan‐bilangan kelipatan 25, yaitu yang menyumbang faktor 5 sebanyak dua kali. Jika J2 adalah banyaknya kemunculan bilangan kelipatan 25 yang ≤ N, maka J2 = N div 25. di antara bilangan‐bilangan itu terdapat bilangan‐bilangan kelipatan 125, yaitu yang menyumbang faktor 5 tiga kali. Jika J3 adalah banyaknya kemunculan bilangan kelipatan 125 yang ≤ N maka J3 = N div 125. ... dst. Maka, jumlah faktor 5 pada N! = J1 + J2 + J3 + ... = (N div 5) + (N div 25) + (N div 125) + ... berdasarkan analisis ini anda cukup membuat iterasi untuk menghitung dan mentotalkan (N div i) dengan i deret 5, 25, 125, ... selama i ≤ N. Algoritma yang diperoleh hanya berisi 8 baris saja sebagai berikut. Untuk N = 1012, iterasi hanya dilakukan kurang dari 18 kali (log5(1012) < 18). readln(N); i := 5; count := 0; while i <= N do begin count := count + (N div i); i := i * 5; end; writeln(count); (OSN 2006) Tim Olimpiade Komputer Indonesia halaman 30 Contoh Soal Olimpiade Sains Nasional Bidang Komputer dan Pembahasan Ulang Tahun Kode Soal: Batas Run-time: Batas Memori: Masukan: Keluaran: OSN603 1 detik / test-case 32 MB Standard input Standard output Beberapa hari lagi, Pak Dengklek akan merayakan ulang tahunnya yang ke‐61. Beliau bermaksud akan mengundang teman‐temannya untuk menghadiri pesta ulang tahunnya tersebut. Sayangnya, beliau baru saja kehilangan satu‐satunya buku telepon yang dipunyainya. Karena itu, ia harus mengunjungi wartel terdekat dan membuka buku kuning (yellow pages) untuk mengetahui nomor telepon teman‐ temannya. Tidak lupa ia mengajak Anda untuk membantunya mencarikan nomor telepon teman‐temannya tersebut. Diberikan buku kuning yang berisi pasangan nama dan nomor telepon seluruh penduduk desa tempat Pak Dengklek tinggal, serta nama‐nama teman Pak Dengklek yang tinggal di desa t...
View Full Document

This document was uploaded on 03/11/2014 for the course TECHNIC 1 at Padang State University.

Ask a homework question - tutors are online