Array yang Hilang
Soal#
Informasi#
- Sumber: CompFest 9 - Penyisihan CPC Senior
- Tanggal: 2017-08-12
Arsip#
Ringkasan#
Carilah banyaknya array $X$ yang berisi $N$ bilangan bulat, sehingga $X_1 \cdot X_2 \cdot \ldots \cdot X_N$ bernilai sama dengan $A_1 \cdot A_2 \cdot A_3 \cdot \ldots \cdot A_N$! Jawaban dimodulo dengan $10^9 + 7$.
Solusi#
Petunjuk#
Pembahasan#
Mari kita cari faktorisasi prima dari $A_1 \cdot A_2 \cdot A_3 \cdot \ldots \cdot A_N$. Kita tidak perlu mengalikan semua bilangan tersebut. Kita bisa melakukan faktorisasi prima pada setiap bilangan, kemudian menjumlahkan eksponen dari setiap faktor prima yang sama. Berikut adalah contoh kode untuk melakukannya.
for
Array cnt
menyimpan eksponen untuk setiap faktor prima. Dengan kata lain, $\text{cnt}[p_i] = e_i$.
Kemudian untuk setiap faktor prima $p_i$ yang berjumlah $e_i$, kita cari banyaknya cara untuk "mendistribusikannya" ke dalam array $X$. Teknik stars and bars dapat digunakan dalam kasus ini. Kita bisa bayangkan $N - 1$ pemisah yang akan memisahkan sebanyak $e_i$ faktor prima $p_i$ yang saling berjajar. Oleh karena itu, banyaknya cara untuk menyusun $N - 1$ pemisah adalah $\binom{e_i \ + \ N \ - \ 1}{N \ - \ 1} = \binom{e_i \ + \ N \ - \ 1}{e_i}$. Kemudian, kita kalikan banyaknya cara tersebut untuk semua faktor prima yang mungkin.
Kode#
using namespace std;
typedef long long int lli;
const lli MOD = 1E9 + 7;
lli T, N, Ai, ans;
lli cnt;
lli F;
lli invers;
lli iF;
// Binomial coefficient
// n!/(r! * (n - r)!) = (1/r! * 1/(n - r)! * n!)
lli
int
Akhir Kata#
Saya baru sadar bahwa saya melakukan prekomputasi faktorial sebanyak $2 \cdot 10^6$, bukan sebanyak $2 \cdot 10^5$.