Skip to content

Commit ad656a5

Browse files
authored
Merge pull request #68 from InflixOP/patch1
Create #2338. Count the Number of Ideal Arrays.cpp
2 parents 368b01b + 825c346 commit ad656a5

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const int mod = 1e9 + 7;
2+
int factMemo[100000] = {};
3+
int dp[100000][15];
4+
using ll = long long;
5+
class Solution {
6+
public:
7+
ll power(ll a, ll b, ll m = mod) {ll res = 1;while (b > 0) {if (b & 1)res = (res * a) % m;a = (a * a) % m;b = b >> 1;}return res;}
8+
ll fact(ll n) {
9+
if (n == 0) return 1;
10+
if (factMemo[n]) return factMemo[n];
11+
factMemo[n] = (n * fact(n - 1)) % mod;
12+
return factMemo[n];
13+
}
14+
ll mod_inv(ll a, ll b) {
15+
return (((fact(a) * power(fact(b), mod - 2)) % mod) * power(fact(a - b), mod - 2)) % mod;
16+
}
17+
18+
int idealArrays(int n, int maxi) {
19+
for (int i = 1; i <= maxi; i++)
20+
for (int j = 1; j <= min(n, 14); j++)
21+
dp[i][j] = 0;
22+
for (int i = 1; i <= maxi; i++) {
23+
dp[i][1] = 1;
24+
for (int j = 2; j * i <= maxi; j++)
25+
for (int k = 1; k < min(n, 14); k++)
26+
dp[i*j][k+1] += dp[i][k];
27+
}
28+
ll res = 0;
29+
for (int i = 1; i <= maxi; i++)
30+
for (int j = 1; j <= min(n, 14); j++)
31+
res = (res + mod_inv(n - 1, n - j) * dp[i][j]) % mod;
32+
return res;
33+
}
34+
};

0 commit comments

Comments
 (0)