2415 Count The Number Of Ideal Arrays
2415 Count The Number Of Ideal Arrays
Count the Number of Ideal Arrays 
You are given two integers n and maxValue, which are used to describe an ideal array.
A 0-indexed integer array arr of length n is considered ideal if the following conditions hold:
1
2
Every arr[i] is a value from 1 to maxValue, for 0 <= i < n.
Every arr[i] is divisible by arr[i - 1], for 0 < i < n.
Return *the number of distinct ideal arrays of length *n. Since the answer may be very large, return it modulo 109 + 7.
Example 1:
1
2
3
4
5
6
7
8
9
10
11
**Input:** n = 2, maxValue = 5
**Output:** 10
**Explanation:** The following are the possible ideal arrays:
- Arrays starting with the value 1 (5 arrays): [1,1], [1,2], [1,3], [1,4], [1,5]
- Arrays starting with the value 2 (2 arrays): [2,2], [2,4]
- Arrays starting with the value 3 (1 array): [3,3]
- Arrays starting with the value 4 (1 array): [4,4]
- Arrays starting with the value 5 (1 array): [5,5]
There are a total of 5 + 2 + 1 + 1 + 1 = 10 distinct ideal arrays.
Example 2:
1
2
3
4
5
6
7
8
9
10
11
12
**Input:** n = 5, maxValue = 3
**Output:** 11
**Explanation:** The following are the possible ideal arrays:
- Arrays starting with the value 1 (9 arrays):
- With no other distinct values (1 array): [1,1,1,1,1]
- With 2nd distinct value 2 (4 arrays): [1,1,1,1,2], [1,1,1,2,2], [1,1,2,2,2], [1,2,2,2,2]
- With 2nd distinct value 3 (4 arrays): [1,1,1,1,3], [1,1,1,3,3], [1,1,3,3,3], [1,3,3,3,3]
- Arrays starting with the value 2 (1 array): [2,2,2,2,2]
- Arrays starting with the value 3 (1 array): [3,3,3,3,3]
There are a total of 9 + 1 + 1 = 11 distinct ideal arrays.
Constraints:
1
2
2 <= n <= 104
1 <= maxValue <= 104
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
MOD = 10**9 + 7
MAX_N = 10**4 + 10
MAX_P = 15 # At most 15 prime factors
sieve = [0] * MAX_N # Smallest prime factor
for i in range(2, MAX_N):
if sieve[i] == 0:
for j in range(i, MAX_N, i):
sieve[j] = i
ps = [[] for _ in range(MAX_N)]
for i in range(2, MAX_N):
x = i
while x > 1:
p = sieve[x]
cnt = 0
while x % p == 0:
x //= p
cnt += 1
ps[i].append(cnt)
c = [[0] * (MAX_P + 1) for _ in range(MAX_N + MAX_P)]
c[0][0] = 1
for i in range(1, MAX_N + MAX_P):
c[i][0] = 1
for j in range(1, min(i, MAX_P) + 1):
c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % MOD
class Solution:
def idealArrays(self, n: int, maxValue: int) -> int:
ans = 0
for x in range(1, maxValue + 1):
mul = 1
for p in ps[x]:
mul = mul * c[n + p - 1][p] % MOD
ans = (ans + mul) % MOD
return ans
This post is licensed under CC BY 4.0 by the author.