Skip to content

Commit 4bd7200

Browse files
committed
Runtime: 369 ms (Top 88.27%) | Memory: 192.6 MB (Top 33.95%)
1 parent 4fd70cb commit 4bd7200

File tree

1 file changed

+29
-28
lines changed

1 file changed

+29
-28
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1+
// Runtime: 369 ms (Top 88.27%) | Memory: 192.6 MB (Top 33.95%)
12
class Solution {
23
public:
3-
4+
45
#define lld long long int
5-
6+
67
int mul(lld a, lld b){
78
lld product = (a*b)%MOD;
89
return product;
910
}
10-
11+
1112
int add(lld a, lld b){
1213
lld addition = (a+b)%MOD;
1314
return addition;
1415
}
15-
16+
1617
const int MOD = 1e9+7;
1718
int binary_exponentiation(lld x, int p){
1819
long long res = 1;
@@ -23,69 +24,69 @@ class Solution {
2324
}
2425
return res;
2526
}
26-
27+
2728
int goodSubsets(int pos, int mask, vector<int>& V, vector<vector<int>>& dp, vector<int>& cache){
2829
if(pos == V.size()) return (mask>0);
29-
30+
3031
if(dp[pos][mask] != -1) return dp[pos][mask]%MOD;
31-
32+
3233
if(V[pos]&mask) return dp[pos][mask] = goodSubsets(pos+1, mask, V, dp, cache) % MOD;
3334
return dp[pos][mask] = add(mul(cache[V[pos]],goodSubsets(pos+1, mask|V[pos], V, dp, cache)),goodSubsets(pos+1, mask, V, dp, cache));
3435
}
35-
36+
3637
int numberOfGoodSubsets(vector<int>& nums) {
37-
38+
3839
int primes[10] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
39-
40+
4041
vector<int> V;
4142
vector<int> cache(1025, 0);
42-
43+
4344
int ones = 0;
44-
45+
4546
for(auto x: nums){
46-
47+
4748
int num = 0, k=0;
4849
int flag = 1;
49-
50+
5051
for(auto j: primes){
5152

5253
int cnt = 0;
5354
while(x%j == 0){
5455
x/=j;
5556
cnt++;
56-
if(cnt>1) break;
57+
if(cnt>1) break;
5758
}
58-
59+
5960
if(cnt > 1)
60-
{
61+
{
6162
flag = 0;
6263
break;
6364
}
64-
65+
6566
if(cnt == 1)
6667
num = num | (1<<k);
67-
68+
6869
++k;
6970
}
70-
71+
7172
if(flag == 0) continue;
72-
73-
if(num == 0) {
73+
74+
if(num == 0) {
7475
ones++;
7576
continue;
7677
}
77-
78+
7879
cache[num]++;
7980
if(cache[num] > 1) continue;
80-
81+
8182
V.push_back(num);
8283
}
83-
84+
8485
vector<vector<int>> dp(V.size(), vector<int> (1024, -1));
85-
86+
8687
int ans = goodSubsets(0,0,V,dp,cache);
8788
ans = mul(binary_exponentiation(2, ones),ans);
88-
89+
8990
return ans;
9091
}
91-
};
92+
};

0 commit comments

Comments
 (0)