Pagini recente » Cod sursa (job #410787) | aladin_si_lampa_fermecata_round15 | Cod sursa (job #2654026) | Cod sursa (job #2621793) | Cod sursa (job #265245)
Cod sursa(job #265245)
#include <stdio.h>
#include <math.h>
#define maxn 10010
#define maxnr 1000010
using namespace std;
long n, i, j, k, m, l, ndp, r, nr, nrb, pr, sum, sol, d;
long v[maxn], dp[maxn], f[maxnr];
int main()
{
freopen("pairs.in", "r", stdin);
freopen("pairs.out", "w", stdout);
scanf("%d\n", &n);
sol=0;
for(i=1; i<=n; i++)
{
sum=i-1;
scanf("%d", &v[i]);
d=1;
nr=0;
r = (long)sqrt(v[i]);
// printf("*\n");
while(v[i]>1 && d<=r)
{
d++;
if(v[i] % d==0)
{
nr++;
dp[nr]=d;
while(v[i] % d == 0)
{
v[i]/=d;
}
// printf("*");
}
// printf("%d ", d);
}
// printf("\n");
if(v[i]>1)
{
nr++;
dp[nr]=v[i];
}
/* for(j=1; j<=nr; j++)
{
printf("%d ", dp[j]);
}
printf("\n");*/
for(j=1; j<(1<<nr); j++)
{
nrb=0;
pr=1;
for(l=0; l<nr; l++)
{
if( (1<<l) & j)
{
nrb++;
pr*=dp[l+1];
}
}
if(nrb%2==0)
{
sum+=f[pr];
}
else
{
sum-=f[pr];
}
f[pr]++;
}
sol+=sum;
}
printf("%d\n", sol);
return 0;
}