Pagini recente » Cod sursa (job #1273976) | Cod sursa (job #2311838) | Cod sursa (job #432291) | Cod sursa (job #1359077) | Cod sursa (job #2558879)
#include <stdio.h>
#include <vector>
using namespace std;
FILE *fin = fopen("pairs.in", "r");
FILE *fout = fopen("pairs.out", "w");
vector <int> a[100005];
int n,i,x,d,nrfact[100005],prod,fr[1000005],val,j,k,nr;
long long ans;
int main()
{
fscanf(fin, "%d", &n);
for(i=1; i<=n; ++i)
{
fscanf(fin, "%d", &x);
if(x%2 == 0)
{
a[i].push_back(2);
nrfact[i]++;
while(x%2 == 0)
x /= 2;
}
d = 3;
while(x > 1)
{
if(x%d == 0)
{
a[i].push_back(d);
++nrfact[i];
while(x%d == 0)
x /= d;
}
d += 2;
}//while
}
for(i=1; i<=n; ++i)
{
val = 1<<(nrfact[i]) - 1;
for(j=1; j<=val; ++j)
{
prod = 1;
nr = 0;
for(k=0; k<=7; ++k)
if(j & (1<<k))
{
prod *= a[i][k];
++nr;
}
fr[prod]++;
if(nr%2)
ans += (fr[prod]-1);
else
ans -= (fr[prod]-1);
}//for j
}
ans = 1LL*n*(n-1)/2 - ans;
fprintf(fout, "%d", ans);
fclose(fin);
fclose(fout);
return 0;
}