Pagini recente » Cod sursa (job #285184) | Cod sursa (job #3225106) | Cod sursa (job #2454036) | Cod sursa (job #2819792) | Cod sursa (job #1390654)
#include <stdio.h>
using namespace std;
FILE*f=fopen("pairs.in","r"),*g=fopen("pairs.out","w");
int fp[1000100], nr[1000100], n, maxim, val;
bool c[1000100], m[1000100], v[1000100];
int main()
{
int x;
fscanf(f,"%d\n", &n);
for(int i = 1; i <= n; i++)
{
fscanf(f,"%d\n", &x);
v[x] = 1;
if(x > maxim )
maxim = x;
}
bool pr;
for(int i = 2; i <= maxim; i++)
{
if(c[i] == 0)
{
nr[++val] = i;
pr = 1;
for(int j = i; j <= maxim; j += i)
{
c[j] = 1;
if(v[j] == 1)
{
pr = 0;
}
fp[j] ++;
}
if(pr == 1)
{
val --;
}
}
}
for(int i = 1; i <= val; i++)
{
for(long long j = ((long long)nr[i]) * nr[i]; j <= maxim; j += ((long long)nr[i]) * nr[i])
{
m[j] = 1;
}
}
long long sol = ((long long) n)*(n-1)/2;
long long p;
for(int i = 2; i <= maxim; i++)
{
if(m[i] == 0)
{
p = 0;
for(int j = i; j <= maxim; j += i)
{
if(v[j] == 1)
{
p++;
}
}
if(fp[i] % 2 == 1)
{
sol -= p * (p-1) /2;
}
else
{
sol += p * (p-1) /2;
}
}
}
fprintf(g,"%lld", sol);
return 0;
}