Pagini recente » Cod sursa (job #2336062) | Cod sursa (job #2244911) | Cod sursa (job #293100) | Cod sursa (job #1918221) | Cod sursa (job #2735204)
#include <fstream>
#define f in
#define g out
using namespace std;
ifstream in ( "indep.in" );
ofstream out( "indep.out" );
void adunare ( int a[], int b[], int c[] ){
int t = 0, i; c[0] = max ( a[0], b[0] );
for ( i=1; i <= c[0]; i++){
c[i] = a[i] + b[i] + t;
t = c[i]/10;
c[i] %= 10;
}
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;
}
}
void scadere ( int a[], int b[] ){
int i, t = 0;
for ( i = b[0]+1; i <= a[0]; i++ )
b[i] = 0;
for ( i=1; i <= a[0]; i++ ){
a[i] = a[i]-b[i]-t;
if ( a[i] < 0 ){
a[i] += 10;
t = 1;
} else t = 0;
}
while ( !a[a[0]] )
a[0]--;
}
int n, i, maxi, j, ok, nr, d, k, e, p;
int v[550], putere[550][550], p2[550], sump[550], summ[550], x[1100], y[1100];
int main() {
f>>n;
for ( i=1; i <= n; i++ ){
f>>v[i];
maxi = max ( maxi, v[i] );
}
p2[0] = 1; p2[1] = 2;
putere[1][0] = 1; putere[1][1] = 1;
sump[0] = summ[0] = 1;
sump[1] = summ[1] = 0;
for ( i=2; i <= n; i++ ){
adunare(putere[i-1], p2, putere[i] );
inmultire(p2, 2, p2);
}
for ( i=2; i <= maxi; i++ ){
ok = 1;
nr = 0;
k = i;
d = 2;
while ( k != 1 ){
e = 0;
while ( k%d == 0 ){
e++;
k /= d;
}
if ( e >= 2 )
ok = 0;
if ( e == 1 )
nr++;
d++;
}
if ( ok ){
x[++p] = i;
y[p] = nr;
}
}
for ( i=1; i <= p; i++ ){
nr = 0;
for ( j = 1; j <= n; j++ )
if ( v[j]%x[i] == 0 )
nr++;
if ( y[i]%2 == 1 )
adunare(sump, putere[nr], sump);
else adunare(summ, putere[nr], summ);
}
scadere(sump, summ);
scadere(putere[n], sump);
if ( putere[n][0] <= 0 )
g<<0;
for ( i = putere[n][0]; i >= 1; i-- )
g<<putere[n][i];
return 0;
}