Pagini recente » Cod sursa (job #2544401) | Cod sursa (job #984137) | Cod sursa (job #1094492) | Cod sursa (job #393420) | Cod sursa (job #120257)
Cod sursa(job #120257)
#include <cstdio>
const int maxn = 100001;
const int maxp = 2000;
FILE *in = fopen("pairs.in","r"), *out = fopen("pairs.out","w");
int n;
int a[maxn];
int k;
char x[maxp];
int primes[maxp];
int maxnr;
void ciur()
{
primes[++k] = 2;
for ( int i = 4; i <= maxp; i += 2 )
x[i] = 'x';
for ( int i = 3; i <= maxp; i += 2 )
if ( x[i] != 'x' )
{
primes[++k] = i;
for ( int j = i+i; j <= maxp; j += i )
x[j] = 'x';
}
}
int e[maxn*10];
int h[maxn*10]; // h[i] = cate numere au ca factor prim i
void read()
{
fscanf(in, "%d", &n);
for ( int i = 1; i <= n; ++i )
fscanf(in, "%d", &a[i]), ++e[ a[i] ], a[i] > maxnr ? maxnr = a[i] : 1;
}
void calch()
{
for ( int i = 1; i <= maxnr; ++i )
for ( int j = i; j <= maxnr; j += i )
if ( e[j] )
++h[i];
}
long long count()
{
long long res = 0;
int nrp = 0;
for ( int i = 2; i <= maxnr; ++i )
{
int tmp = i;
int ee = 0;
int ok = 1;
nrp = 0;
for ( int j = 1; primes[j]*primes[j] <= i; ++j )
{
ee = 0;
if ( tmp % primes[j] == 0 )
{
++nrp;
while ( tmp % primes[j] == 0 )
tmp /= primes[j], ++ee;
if ( ee > 1 )
{
ok = 0;
break;
}
}
}
if ( tmp > 1 )
++nrp;
if ( ok )
{
if ( nrp % 2 == 0 )
res = res - (long long)(h[i]*(h[i] - 1) / 2);
else
res = res + (long long)(h[i]*(h[i] - 1) / 2);
}
}
return res;
}
int main()
{
ciur();
read();
// calch();
long long cnt = (long long)n*(n-1)/2;
fprintf(out, "%lld\n", cnt - count());
return 0;
}