PRIMA + PRIMA = PRIMA TOKI News 2016 TOKI News 2016

12 Oleh : Ammar Fathin Sabili, Alumni TOKI 1. PRIMA + PRIMA = PRIMA Diberikan N buah bilangan prima berbeda P1, P2, P3, …, PN. Tentukan apakah ada sepasang bilangan prima Pi dan Pj dengan i ≠ j, yang apabila dijumlahkan akan men- jadi bilangan prima juga. Batasan : • 2 ≤ N ≤ 100.000 • 1 ≤ Pk ≤ 500.000 untuk k dari 1 hing- ga N • Pk dijamin bilangan prima untuk k dari 1 hingga N Format Input : Baris 1 : Sebuah bilangan N Baris 2 : P1, P2, P3, …, PN Format Output : ADA TIDAK ADA sesuai deskripsi di atas Sample input dan output : 5 23 19 11 7 2 ADA 5 2 7 13 19 23 TIDAK ADA Keterangan : • Pada sample pertama, ada sepasang bilangan prima 11 and 2 yang apa- bila dijumlahkan adalah 13 yang juga merupakan bilangan prima. • Pada sample kedua, idak ada sepa- sang bilangan prima yang apabila dijumlahkan menjadi bilangan prima lainnya. Solusi : • Pertama, [u]cek apakah ada angka 2[u] di dalam list bilangan prima yang diberikan. • Jika idak ada angka 2, maka di- pasikan list tersebut hanya berisi bilangan-bilangan prima yang ganjil. Perhaikan bahwa apabila dua buah bilangan ganjil dijumlahkan maka akan menjadi genap atau dengan kata lain kelipatan 2. Sehingga dipasikan idak ada pasangan yang membentuk bilangan prima bilangan genap bu- kanlah bilangan prima. Maka, kelu- arkan “TIDAK ADA”. • Jika terdapat angka 2, maka laku- kan bruteforce angka 2 tersebut di- jumlahkan dengan salah satu angka lain di dalam list. Cari apakah ada penjumlahan yang menghasilkan bilangan prima. Apabila ada, maka keluarkan “ADA”, jika idak ada maka keluarkan “TIDAK ADA”. • Untuk melakukan cek bilangan pri- ma dengan cepat, dapat digunakan Sieve of Eratosthenes yang berisi ar- ray boolean is Prime untuk angka 1 hingga 500.002. 12 Bahas Soal OSP 2016 - Sesi 2 B : Membuat Program Algoritma Serderhana === Contoh kode === Menggunakan Sieve of Eratosthenes untuk pengecekan bilangan prima. for int i = 2; i = 500002; i++ { isPrime[i] = true; } for int i = 2; i = 500002; i++ { if isPrime[i] { j = 2 i; while j = 500002 { isPrime[j] = false; j = j + i; } } } Algoritma pencarian pasangan PRIMA + PRIMA = PRIMA. Asumsikan based index yang digunakan adalah 1-based index. bool ada2 = false; for int i = 1; i = N; i++ { if P[i] == 2 { ada2 = true; } } if ada2 { cout “TIDAK ADA” endl; } else { bool adaPasanganPrima = false; for int i = 1; i = N; i++ { if P[i] = 2 isPrime[P[i] + 2] { adaPasanganPrima = true; } } if adaPasanganPrima { cout “TIDAK ADA” endl; } else { cout “ADA” endl; } } 13 14

2. MENGHITUNG PERSEGI