Here is the C++ code I wrote :
#include<iostream>
#include<string>
#include<iomanip>
#include<set>
#include<queue>
#include<cmath>
#include<algorithm>
#include<vector>
#include<limits.h>
#include<math.h>
#include<array>
#include<numeric>
#include<map>
using ll = long long;
const int MOD = 1e9+7;
int power(int x,int y){
if(y < 0){
return 1;
}
int res = 1;
while(y > 0){
if(y%2){
res = (res * 1LL * x)%MOD;
}
x = (x * 1LL * x)%MOD;
y /= 2;
}
return res;
}
int main(){
std::vector<int> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67};
int n;
std::cin >> n;
std::vector<std::array<int,2>> freq(71,{0,0});
for(int i = 0; i < n;++i){
int x;
std::cin >> x;
++freq[x][0];
}
std::vector<int> efreq(70,0),ofreq(70,0);
for(int num = 1;num <= 70;++num){
efreq[num] = power(2,freq[num][0]-1);
ofreq[num] = efreq[num];
if(freq[num][0] == 0){
ofreq[num] = 0;
}
}
std::vector<std::vector<int>> dp(71,std::vector<int> (1 << 19,0));
dp[0][0] = 1;
for(int num = 1; num <= 70;++num){
if(freq[num][0] == 0){
continue;
}
int mask = 0;
for(int i = 0; i < 19;++i){
if(num%primes[i] != 0){
continue;
}
int cnt = 0;
int temp = num;
while(temp%primes[i] == 0){
temp /= primes[i];
++cnt;
}
if(cnt%2){
mask += 1 << i;
}
}
freq[num][1] = mask;
}
for(int num = 0;num < 70;++num){
for(int mask = 0;mask < (1 << 19);++mask){
int new_mask = (mask ^ freq[num+1][1]);
dp[num+1][new_mask] += (dp[num][mask] * 1LL * ofreq[num+1])%MOD;
dp[num+1][new_mask] %= MOD;
dp[num+1][mask] += (dp[num][mask] * 1LL * efreq[num+1])%MOD;
dp[num+1][mask] %= MOD;
}
}
std::cout << dp[70][0] << "\n";
}
I am getting this error:
malloc.c:2379: sysmalloc: Assertion `(old_top == initial_top (av) &&
old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse
(old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted
I did search for this error but the the couple of answers I found were C specific and based on malloc and dangling pointers and stuff like that. I am not even using any pointers and I literally don't know what went wrong here. Please help.
For anyone wondering what this code even does: I just learnt dynamic programming with bitmasks and I was just practicing some problems on it when this solution I code up gave this error .
Sorry for the bad title but I don't know what I am looking for here except a fix for some error.