Pagini recente » Cod sursa (job #686341) | Cod sursa (job #2168834) | Cod sursa (job #2897933) | Cod sursa (job #1338235) | Cod sursa (job #109860)
Cod sursa(job #109860)
#include<stdio.h>
#define NMAX 100000
int get(int x);
int p[7] = {2, 3, 5, 7, 11, 13, 17};
int N, V[NMAX], A[NMAX], D[2][1 << 7], U[1 << 7][1 << 7];
int main()
{
int i, j, z, ok;
long long rez = 0;
freopen("pairs.in", "r", stdin);
freopen("pairs.out", "w", stdout);
scanf("%d", &N);
for(i = 0; i < N; i++)
{
scanf("%d", V + i);
A[i] = get(V[i]);
}
for(i = 0; i < (1 << 7); i++)
for(j = 0; j < (1 << 7); j++)
{
for(z = 0; z < 7; z++)
if((i & (1 << z)) && !(j & (1 << z)))
z = 7;
if(z == 7)
U[i][j] = 1;
}
for(i = 0, ok = 1; i < N; i++, ok = !ok)
for(j = 0; j < (1 << 7); j++)
{
D[ok][j] = D[!ok][j];
if(U[A[i]][j]) D[ok][j]++;
if(j == (A[i] ^ ((1 << 7) - 1)))
rez += D[!ok][j];
}
printf("%d\n", rez);
return 0;
}
int get(int x)
{
int rez = 0;
for(int i = 0; i < 7; i++)
if((x % p[i]) == 0) rez |= 1 << i;
return rez;
}