Pagini recente » Cod sursa (job #678639) | Cod sursa (job #578448) | Cod sursa (job #3163356) | Cod sursa (job #1388342) | Cod sursa (job #393486)
Cod sursa(job #393486)
#include<fstream>
using namespace std;
const char iname[]="indep.in";
const char oname[]="indep.out";
const int maxn=1005;
const int maxl=350;
ifstream f(iname);
ofstream g(oname);
void add(int A[], int B[])
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
void sub(int A[], int B[])
{
int i, t = 0;
for (i = 1; i <= A[0]; i++)
A[i] += (t = (A[i] -= B[i] + t) < 0) * 10;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
int d[maxn],i,j,n,z[maxn][maxl],a[maxn],p[maxn],ans[maxl];
int main()
{
f>>n;
for(i=1;i<=n;++i)
f>>a[i];
for(i=1;i<=1000;++i)
for(j=1;j<=n;++j)
if(a[j]%i==0)
++d[i];
for(i=2;i<=1000;++i)
if(p[i]==0)
{
for(j=i*i;j<=1000;j+=i*i)
p[j]=-1;
for(j=i;j<=1000;j+=i)
if(p[j]!=-1)
++p[j];
}
z[0][0]=1;
z[1][1]=z[1][0]=1;
for(i=2;i<=1000;++i)
add(z[i],z[i-1]),add(z[i],z[i-1]),add(z[i],z[1]);
ans[0]=1;
for(i=1;i<=1000;++i)
if(p[i]!=-1)
if(p[i]&1)
sub(ans,z[d[i]]);
else
add(ans,z[d[i]]);
for(i=ans[0];i;--i)
g<<ans[i];
g<<"\n";
f.close();
g.close();
return 0;
}