Pagini recente » Cod sursa (job #2369927) | Cod sursa (job #2521835) | Cod sursa (job #1716078) | Cod sursa (job #301872) | Cod sursa (job #2450836)
#include <bits/stdc++.h>
///Base=100.000.000
///Val=1.000
///N=500
using namespace std;
///
int n, i, j, k, mx;
int val[501], powers[501][25], ciur[1001];
bitset<1001> check, ok;
long long res;
///
void read();
void solve();
void write();
void formPow(int i);
void diff(int i);
void sum(int i);
void buildCiur();
int main()
{
read();
solve();
write();
return 0;
}
void read(){
freopen("indep.in", "r", stdin);
scanf("%d", &n); int cnt=0;
for(i=1; i<=n; ++i){
int x;
scanf("%d", &x);
if(!check[x]){
check[x]=true;
val[++cnt]=x;
mx=max(mx, x);
}
}
fclose(stdin);
}
void solve(){
powers[0][0]=powers[0][1]=1;
for(i=1; i<=n; ++i) formPow(i);
for(i=1; i<=n; ++i) powers[i][1]=powers[i][1]-i-1;
buildCiur();
for(i=2; i<=mx; ++i){
if(ok[i]) continue;
int tot=0;
for(j=i; j<=mx; j+=i) if(check[j]) ++tot;
if(ciur[i]&1) diff(i);
else sum(i);
}
}
void write(){
freopen("indep.out", "w", stdout);
printf("%d", powers[n][powers[n][0]]);
for(i=powers[n][0]-1; i>=1; --i){
for(j=10000000; j>=1; j/=10){
printf("%d", (powers[n][i]/j)%10);
}
}
fclose(stdout);
}
void formPow(int i){
int j, r=0;
powers[i][0]=powers[i-1][0];
for(j=1; j<=powers[i][0]; ++j){
powers[i][j]=r+2*powers[i-1][j];
r=powers[i][j]/100000000;
powers[i][j]%=100000000;
}
if(r) powers[i][++powers[i][0]]=r;
}
void diff(int i){
int j;
for(j=1; j<=powers[n][0]; ++j){
powers[n][j]-=powers[i][j];
if(powers[n][j]<0){
powers[n][j]=100000000-powers[n][j];
--powers[n][j+1];
}
}
while(!powers[n][powers[n][0]]) --powers[n][0];
}
void sum(int i){
int j, r=0;
for(j=1; j<=powers[n][0]; ++j){
powers[n][j]+=r+powers[i][j];
r=powers[n][j]/100000000;
powers[i][j]%=100000000;
}
if(r) powers[n][++powers[n][0]]=r;
}
void buildCiur(){
for(i=2; i<=mx; ++i){
if(ciur[i]) continue;
for(j=i; j<=mx; j+=i){
++ciur[j];
if(!(j%(i*i))) ok[j]=true;
}
}
}