Pagini recente » Cod sursa (job #1007883) | Cod sursa (job #1522345) | Cod sursa (job #2238586) | Cod sursa (job #1230714) | Cod sursa (job #1737280)
#include<fstream>
#include<cstring>
using namespace std;
int n, i, j, nr, maxim;
int c[1005], ok[1005], num[1005], v[505], sol[300], aux[300];
int pt[505][300];
ifstream fin("indep.in");
ofstream fout("indep.out");
void mult(int a[], int x, int v[]){
v[0] = a[0];
int i, t = 0;
for(i = 1; i <= v[0]; i++){
v[i] = a[i] * x + t;
t = v[i] / 10;
v[i] %= 10;
}
while(t != 0){
v[++v[0]] = t % 10;
t /= 10;
}
}
void adunare(int v[], int a[]){
v[0] = max(v[0], a[0]);
int i, t = 0;
for(i = 1; i <= v[0]; i++){
v[i] += a[i] + t;
t = v[i] / 10;
v[i] %= 10;
}
if(t != 0){
v[++v[0] ] = t;
}
}
void scadere(int v[], int a[]){
int i, t = 0;
for(i = 1; i <= v[0]; i++){
v[i] = v[i] - a[i] - t;
if(v[i] >= 0){
t = 0;
}
else{
t = 1;
v[i] += 10;
}
}
while(v[0] > 0 && v[ v[0] ] == 0){
v[0]--;
}
}
int main(){
fin>> n;
for(i = 1; i <= n; i++){
fin>> v[i];
maxim = max(maxim, v[i]);
}
pt[0][0] = pt[0][1] = 1;
for(i = 1; i <= n; i++){
mult(pt[i - 1], 2, pt[i]);
}
aux[0] = aux[1] = 1;
for(i = 0; i <= n; i++){
scadere(pt[i], aux);
}
adunare(sol, pt[n]);
for(i = 2; i <= maxim; i++){
if(c[i] == 0){
num[i] = 1;
for(j = i + i; j <= maxim; j += i){
c[j] = 1;
num[j] ++;
if(j % (i * i) == 0){
ok[j] = 1;
}
}
}
if(ok[i] == 0){
nr = 0;
for(j = 1; j <= n; j++){
if(v[j] % i == 0){
nr++;
}
}
if(num[i] % 2 == 1){
scadere(sol, pt[nr]);
}
else{
adunare(sol, pt[nr]);
}
int abc =0;
}
}
if(sol[0] == 0){
fout<<"0\n";
return 0;
}
for(i = sol[0]; i >= 1; i--){
fout<< sol[i];
}
return 0;
}