Pagini recente » Istoria paginii runda/oji_cls.10 | Cod sursa (job #609953) | Cod sursa (job #2233399) | Cod sursa (job #491666) | Cod sursa (job #2843595)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int NMAX(1005);
int v[NMAX], fr[NMAX], afis1[NMAX], rez[1005][1005], afis2[NMAX], ax[NMAX];
inline void add(int vec[NMAX], int care[NMAX])
{
if(care[0] > vec[0])
for(int i = vec[0] + 1; i <= care[0]; ++i)
vec[++vec[0]] = 0;
else
for(int i = care[0] + 1; i <= vec[0]; ++i)
care[++care[0]] = 0;
int t = 0;
for(int i = 1; i <= vec[0]; ++i)
{
vec[i] += care[i] + t;
t = vec[i] / 10;
vec[i] %= 10;
}
if(t)
vec[++vec[0]] = t;
}
inline void scade(int vec[NMAX], int care[NMAX])
{
int t = 0;
for(int i = care[0] + 1; i <= vec[0]; ++i)
care[i] = 0;
for(int i = 1; i <= vec[0]; ++i)
{
vec[i] = vec[i] - care[i] - t;
if(vec[i] < 0)
vec[i] += 10, t = 1;
else t = 0;
}
while(!vec[vec[0]])
--vec[0];
}
int main()
{
int n;
fin >> n;
for(int i = 1; i <= n; ++i)
fin >> v[i];
rez[0][0] = rez[0][1] = ax[0] = ax[1] = 1;
for(int put = 1; put <= 1000; ++put)
{
for(int i = 1; i <= rez[put - 1][0]; ++i)
rez[put][i] = rez[put - 1][i];
rez[put][0] = rez[put - 1][0];
int t = 0;
for(int i = 1; i <= rez[put][0]; ++i)
{
t = rez[put][i] * 2 + t;
rez[put][i] = t % 10;
t /= 10;
}
while(t)
rez[put][++rez[put][0]] = t % 10, t /= 10;
}
for(int x = 0; x <= 1000; ++x)
scade(rez[x], ax);
for(int x = 1; x <= 1000; ++x)
for(int i = 1; i <= n; ++i)
if(x <= v[i] && v[i] % x == 0)
++fr[x];
afis1[0] = afis2[0] = 1;
for(int x = 2; x <= 1000; ++x)
if(fr[x])
{
int d = 2;
int cx = x;
int cnt = 0;
bool ok = 1;
while(cx != 1)
{
int exp = 0;
while(cx % d == 0)
cx /= d, ++exp;
if(exp)
{
if(exp > 1)
{
ok = 0;
break;
}
++cnt;
}
++d;
}
if(ok)
{
if(cnt % 2 == 1)
add(afis1, rez[fr[x]]);
else add(afis2, rez[fr[x]]);
}
}
add(afis2, rez[fr[1]]);
scade(afis2, afis1);
if(afis2[0] <= 0)
fout << 0 << '\n';
else
for(int i = afis2[0]; i >= 1; --i)
fout << afis2[i];
return 0;
}