BNPCHS 2009 - Final Round
G - Jumlah Pembagi
Author: Eko Wibowo
Misalnya kita memiliki sebuah bilangan N = 60, pembagi dari 60 adalah: 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 dan 60, yang semuanya memiliki faktor prima hanya 2, 3 atau 5, bisa juga ditulis sebagai: 203050, 213050, 203150, 223050, 203051, 213150, 213051, 223150, 203151, 223051, 213151, 223151. Jumlah dari semua bilangan tersebut adalah 203050 + 203051 + 203150 + 203151 + 213050 + 213051 + 213150 + 213151 + 223050 + 223051 + 223150 + 223151, atau bisa ditulis sebagai: (20 + 21 + 22) * (30 + 31) * (50 + 51).
Dari contoh di atas, bisa disimpulkan untuk menghitung jumlah pembagi dari suatu bilangan bulat N bisa dengan memfaktorkan N menjadi p1a1 * p2a2 * … * ptat dimana p adalah faktor prima dari N dan menghitung rumus:
SOD = (p10 + p11 + … + p1a1) * (p20 + p21 + … + p2a2) * … * (pt0 + pt1 + … + ptat)
Masalah berikutnya adalah bagaimana cara menghitung p10 + p11 + … + p1a1 dengan cepat, karena pangkat a bisa mencapai 100,000,000 (batasan input).
Ada (setidaknya) dua cara untuk menyelesaikan masalah ini, yang pertama adalah dengan divide and conquer:
f(a,n) { // menghitung nilai dari a0 + a1 + … + an
if ( n == 0 ) return 1;
if ( n mod 2 == 1) {
x = f(a,n-1);
return x + x * (a - 1) + 1 ;
}
else {
x = f(a,n/2);
return x * (x * (a - 1) + 1) + x;
}
}
Cara kedua adalah dengan menggunakan rekursi yang dimodelkan sebagai matrix
![]()
di mana elemen (1,1) dari matrix A adalah f(a,n) dan elemen (1,2) adalah an. Di sini teknik divide and conquer kembali digunakan untuk memangkatkan matrix tersebut.
- Problem A - Teks Fibonacci
- Problem B - BeSaR DaN KeCiL
- Problem C - Rentang Terbesar
- Problem D - Merakit Komputer
- Problem E - Mario Bros
- Problem F - Kaca Patri
- Problem G - Jumlah Pembagi
- Problem H - Drum Minyak Pak Ricat
- Problem I - Jumlah Pangkat
- Problem J - Ordo Keprimaan
- Medalist
pertamax!
Eko Wibowo
7 Dec 09 at 11:42 pm
setelah di teliti, 10 problems yang ada, problem authornya beda2 smua :))
Felix J
8 Dec 09 at 12:34 am
Argghhhh, problem A dan G ngga akan pernah gw lupain !
Timotius Sakti
8 Dec 09 at 12:43 am
Wah soal2nya bagus2 loh…
Variasinya dan tingkat kesulitannya pas!
Hore… sekarang tidak ada alasan lagi untuk tidak nge-blog INC/ICPC 09 >:)
Felix Halim
8 Dec 09 at 10:56 am
kok blakangan ini write-upnya ngga ada storynya pak? spt write-up HS07 gt… pengen tau behind the scene-nya kayak apa
anyway, soalnya bagus2 & menarik, tapi banyak bgt euy
Angelina Veni
8 Dec 09 at 10:30 pm
mana?
mahli
10 Dec 09 at 4:24 pm
writeup icpc….~ >:)
Felix J
11 Dec 09 at 8:20 pm
gan, ada contoh kodingannya g tentang problem dari A-j tu???
kirimin dong.. thanks
martin muhar
14 May 10 at 5:12 pm