Pagini recente » Cod sursa (job #418152) | Cod sursa (job #2930529) | Cod sursa (job #2210580) | Cod sursa (job #945277) | Cod sursa (job #2982077)
#include <iostream>
#include <fstream>
#include <cmath>
#define nmx 505
using namespace std;
int n,x,v[nmx],dp[nmx][nmx][16],fprm[nmx][5],ctp[nmx];
void prim(int x,int i)
{
int d=2,ct=0;
while (x!=1)
{
if (x%d==0)
{
fprm[i][++ct]=d;
while (x%d==0)
x/=d;
}
if (d==2)
d++;
else
d+=2;
if (d*d>x && x!=1)
d=x;
}
ctp[i]=ct;
}
int main()
{
ifstream f ("indep.in");
ofstream g ("indep.out");
f>>n;
for (int i=1; i<=n; i++)
{
f>>v[i];
x=v[i];
prim(x,i);
ctp[i]=pow(2,ctp[i])-1;
}
for (int i=1; i<=n; i++)
{
dp[i][i][ctp[i]]=1;
for (int j=i+1; j<=n; j++)
{
int p=0,put2=1;
for (int l=1; fprm[i][l]!=0; l++)
{
if (v[j]%fprm[i][l]==0)
p+=put2;
put2*=2;
}
for (int l=1; l<=ctp[i]; l++)
if (l<=p && (l)&(p)==l)
{
if (dp[i][j-1][l]==0)
dp[i][j-1][l]=1;
dp[i][j][l]=2*dp[i][j-1][l];
}
}
}
unsigned long long rsp=pow(2,n)-1;
for (int i=1; i<=n; i++)
for (int j=1; j<=ctp[i]; j++)
rsp-=dp[i][n][j];
g<<rsp;
}