Pagini recente » Cod sursa (job #1407227) | Cod sursa (job #1992304) | Cod sursa (job #550785) | Rating Ioana Dragos (carriedaway) | Cod sursa (job #251977)
Cod sursa(job #251977)
#include <algorithm>
#include <stdio.h>
#define MAX 1000010
using namespace std;
int n, valMax;
short vctAp[MAX], vctDivPrimi[MAX];
int vctNrForm[MAX];
int main()
{
freopen("pairs.in", "r", stdin);
freopen("pairs.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int elem;
scanf("%d", &elem);
vctAp[elem] = 1;
valMax = max(valMax, elem);
}
for (int i = 1; i <= valMax; vctNrForm[i] = 1, i++);
for (int i = 2; i <= valMax; i++)
for (int j = i; j <= valMax; j += i)
{
vctDivPrimi[j]++;
vctNrForm[j] *= i;
}
long long sol = (long long) n * (n - 1) / 2;
for (int i = 2; i <= valMax; i++)
if (vctNrForm[i] == i)
{
long long nrMult = 0;
for (int j = i; j <= valMax; j += i)
nrMult += vctAp[j];
if (vctDivPrimi[i] & 1)
sol -= (nrMult - 1) * nrMult / 2;
else sol += (nrMult - 1) * nrMult / 2;
}
printf("%lld", sol);
fclose(stdin);
fclose(stdout);
return 0;
}