Pagini recente » Cod sursa (job #1862967) | Cod sursa (job #531047) | Cod sursa (job #1499980) | Cod sursa (job #426266) | Cod sursa (job #1892108)
#include <bits/stdc++.h>
using namespace std;
const int VMAX = 1024,
LMAX = 256;
int n;
int f[VMAX], r[LMAX], t[LMAX], tt[LMAX], pinex[VMAX];
void add(int a[], int b[]) {
int la, lb, c;
la = a[0];
lb = b[0];
c = 0;
for (int i = 1; i <= max(la, lb) || c > 0; ++i) {
if (i > la) a[i] = 0;
if (i > lb) b[i] = 0;
a[0] = i;
a[i]+= b[i] + c;
c = a[i] / 10;
a[i]%= 10; } }
void sub(int a[], int b[]) {
int la, lb, c;
la = a[0];
lb = b[0];
c = 0;
for (int i = 1; i <= max(la, lb) || c > 0; ++i) {
if (i > la) a[i] = 0;
if (i > lb) b[i] = 0;
a[i]-= b[i] + c;
if (a[i] < 0) {
c = 1;
a[i]+= 10; }
else {
c = 0; } }
a[0] = 1;
for (int i = 1; i <= max(la, lb); ++i) if (a[i])
a[0] = i; }
int main() {
ifstream fi("indep.in");
ofstream fo("indep.out");
int n, s, tmp;
fi >> n;
for (int i = 1; i <= n; ++i) {
fi >> tmp;
++f[tmp]; }
for (int i = 2; i < VMAX; ++i) if (!pinex[i])
for (int j = i; j < VMAX; j+= i)
++pinex[j];
for (int i = 2; i < VMAX; ++i)
pinex[i] = (pinex[i] % 2) ? 1 : -1;
for (int i = 2; i * i < VMAX; ++i)
for (int j = i * i; j < VMAX; j+= i * i)
pinex[j] = 0;
r[0] = 1;
for (int i = 2; i < VMAX; ++i) if (pinex[i]) {
s = 0;
for (int j = i; j < VMAX; j+= i)
s+= f[j];
t[0] = 1;
t[1] = 1;
for (int j = 0; j < s; ++j) {
memcpy(tt, t, sizeof t);
add(t, tt); }
tt[0] = 1;
tt[1] = 1;
sub(t, tt);
if (pinex[i] == 1)
add(r, t);
else
sub(r, t); }
t[0] = 1;
t[1] = 1;
for (int i = 1; i <= n; ++i) {
memcpy(tt, t, sizeof t);
add(t, tt); }
sub(t, r);
r[0] = 1;
r[1] = 1;
sub(t, r);
for (int i = t[0]; i > 0; --i)
fo << t[i];
fo << '\n';
return 0; }