1735. Count Ways to Make Array With Product
Description
You are given a 2D integer array, queries
. For each queries[i]
, where queries[i] = [ni, ki]
, find the number of different ways you can place positive integers into an array of size ni
such that the product of the integers is ki
. As the number of ways may be too large, the answer to the ith
query is the number of ways modulo 109 + 7
.
Return an integer array answer
where answer.length == queries.length
, and answer[i]
is the answer to the ith
query.
Example 1:
Input: queries = [[2,6],[5,1],[73,660]] Output: [4,1,50734910] Explanation: Each query is independent. [2,6]: There are 4 ways to fill an array of size 2 that multiply to 6: [1,6], [2,3], [3,2], [6,1]. [5,1]: There is 1 way to fill an array of size 5 that multiply to 1: [1,1,1,1,1]. [73,660]: There are 1050734917 ways to fill an array of size 73 that multiply to 660. 1050734917 modulo 109 + 7 = 50734910.
Example 2:
Input: queries = [[1,1],[2,2],[3,3],[4,4],[5,5]] Output: [1,2,3,10,5]
Constraints:
1 <= queries.length <= 104
1 <= ni, ki <= 104
Solutions
Solution 1: Prime Factorization + Combinatorial Mathematics
We can perform prime factorization on \(k\), i.e., \(k = p_1^{x_1} \times p_2^{x_2} \times \cdots \times p_m^{x_m}\), where \(p_i\) is a prime number, and \(x_i\) is the exponent of \(p_i\). The problem is equivalent to: placing \(x_1\) \(p_1\)s, \(x_2\) \(p_2\)s, \(\cdots\), \(x_m\) \(p_m\)s into \(n\) positions respectively, where a single position can be empty. The question is how many schemes are there.
According to combinatorial mathematics, there are two cases when we put \(x\) balls into \(n\) boxes:
If the box cannot be empty, the number of schemes is \(C_{x-1}^{n-1}\). This is using the partition method, i.e., there are a total of \(x\) balls, and we insert \(n-1\) partitions at \(x-1\) positions, thereby dividing the \(x\) balls into \(n\) groups.
If the box can be empty, we can add \(n\) virtual balls, and then use the partition method, i.e., there are a total of \(x+n\) balls, and we insert \(n-1\) partitions at \(x+n-1\) positions, thereby dividing the actual \(x\) balls into \(n\) groups and allowing the box to be empty. Therefore, the number of schemes is \(C_{x+n-1}^{n-1}\).
Therefore, for each query \(queries[i]\), we can first perform prime factorization on \(k\) to get the exponents \(x_1, x_2, \cdots, x_m\), then calculate \(C_{x_1+n-1}^{n-1}, C_{x_2+n-1}^{n-1}, \cdots, C_{x_m+n-1}^{n-1}\), and finally multiply all the scheme numbers.
So, the problem is transformed into how to quickly calculate \(C_m^n\). According to the formula \(C_m^n = \frac{m!}{n!(m-n)!}\), we can pre-process \(m!\), and then use the inverse element to quickly calculate \(C_m^n\).
The time complexity is \(O(K \times \log \log K + N + m \times \log K)\), and the space complexity is \(O(N)\).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|