Pagini recente » Cod sursa (job #811920) | Cod sursa (job #3198197) | Cod sursa (job #2923939) | Cod sursa (job #1108008) | Cod sursa (job #1774722)
#include <fstream>
#include <iostream>
using namespace std;
int a[510], x[1010], y[1010], b[1010];
int n, i, j, maxim, k, p, nr, e, sol;
int P2[510][510], Doi[510], sump[510], summ[510];
void scadere(int A[], int B[]){
int i, T=0;
for (i=B[0]+1;i<=A[0];)
B[i++]=0;
for (i=1;i<=A[0];i++) {
A[i]=A[i]-(B[i]+T);
if (A[i]<0)
T=1;
else
T=0;
if (T)
A[i]+=10;
}
while (!A[A[0]])
A[0]--;
}
void adunare(int A[], int B[], int C[]) {
int t = 0;
int i, m = (A[0] > B[0] ? A[0] : B[0]);
for (i=1;i<=m;i++) {
C[i] = A[i] + B[i] + t;
t = C[i]/10;
C[i] = C[i] % 10;
}
C[0] = m;
if (t)
C[ ++C[0] ] = t;
}
void inmultire (int A[], int b, int C[]) {
int t = 0, i;
for (i=1;i<=A[0];i++) {
C[i] = A[i]*b + t;
t = C[i] / 10;
C[i] %= 10;
}
C[0] = A[0];
while (t) {
C[ ++C[0] ] = t%10;
t /= 10;
}
}
int main () {
ifstream fin ("indep.in");
ofstream fout("indep.out");
fin>>n;
for (int i=1;i<=n; i++) {
fin>>a[i];
if (a[i] > maxim) {
maxim = a[i];
}
}
// doi[0] = 1; doi[1] = 2; // numarul 2
Doi[0] = 1; Doi[1] = 2; // puterea lui 2
P2[1][0] = 1;P2[1][1] = 1;
sump[0] = 1; sump[1] = 0;
summ[0] = 1; summ[1] = 0;
for (i=2;i<=n;i++) {
adunare(P2[i-1], Doi, P2[i]);
inmultire (Doi, 2, Doi);
}
for (i=2;i<=maxim;i++) {
j = 2;
k = i;
int ok = 1;
nr = 0;
while (k!=1) {
e = 0;
while (k%j == 0) {
e++;
k/=j;
}
if (e>=2) {
ok = 0;
}
if (e == 1) {
nr++;
}
j++;
}
if (ok) {
x[++p] = i;
y[p] = nr;
}
}
/*
for (i=1;i<=p;i++)
cout<<x[i]<<" ";
*/
for (i=1;i<=p;i++) {
nr = 0;
for (j=1;j<=n;j++)
if (a[j]%x[i] == 0)
nr++;
if (y[i] % 2 == 1)
//sol += ((1<<nr)-1);
adunare(sump, P2[nr], sump);
else
//sol -= ((1<<nr)-1);
adunare(summ, P2[nr], summ);
}
scadere(sump, summ);
scadere(P2[n], sump);
// fout<<(1<<n)-1-sol;
for (int i=P2[n][0];i>=1;i--)
fout<<P2[n][i];
return 0;
}