cf893 E. Counting Arrays

题意:

给定 n 和 K,问有多少个 “pairwise distinct”(存在一个位置不相等) 的长为 K 的整数组,满足数组元素的积为 n

思路:

\[n = p_1^{c_1}p_2^{c_2}\cdots \]

每个 \(c\) 独立计算。把 c 个相同的球分到 K 个不同的盒子,允许有空盒子。c+1 个位置放 K-1 块隔板:\(C_{c+1}^{K-1}\),然后允许放在相同位置:\(C_{c+1+(K-1-1)}^{K-1}=C_{c+K-1}^{K-1}\)

最后分配偶数个负号:\(C_K^0+C_K^2+\cdots =2^{K-1}\)

int n, K; cin >> n >> K;
 
ll ans = mi2[K-1]; //分配偶数个负号
for(int d = 2; d <= n / d; d++) if(n % d == 0) {
    int c = 0; while(n % d == 0) n /= d, c++;
    (ans *= C(c+K-1, K-1)) %= mod;
} if(n > 1) (ans *= C(1+K-1, K-1)) %= mod;
 
cout << ans << endl;
posted @ 2022-04-24 15:38  Bellala  阅读(29)  评论(0)    收藏  举报