Pagini recente » Cod sursa (job #2893954) | Cod sursa (job #1904801) | Cod sursa (job #590835) | Cod sursa (job #1846801) | Cod sursa (job #690608)
Cod sursa(job #690608)
#include <fstream>
#include <cstring>
#include <cmath>
#define maxn 1000000
#define MAX 1000100
using namespace std;
long long x[MAX];
int m,divizori[MAX],a,n,rad;
long long prod,sol;
bool in[MAX],no[MAX];
void ciur()
{
for(int i=2;i<=1000000;i++)
if(!divizori[i])
{
divizori[i]=1;
for(int j=i+i;j<=1000000;j+=i) divizori[j]++;
}
}
int main()
{
int i,j;
ifstream fi("pairs.in");
ofstream fo("pairs.out");
fi>>n;
rad=(int)sqrt((double)n);
sol=n*(n-1)/2;
ciur();
for(i=1;i<=n;i++)
{
fi>>a;
in[a]=1;
}
for(i=2;i<=maxn;i++)
for(j=i;j<=maxn;j+=i)
if(in[j]) x[i]++;
for(i=2;i<=rad;i++)
for(j=1;i*i*j<=maxn;j++)
no[i*i*j]=1;
for(i=2;i<=maxn;i++)
if(x[i]>1 and !no[i])
{
if(divizori[i]%2) sol-=(long long)x[i]*(x[i]-1)/2; else sol+=(long long)x[i]*(x[i]-1)/2;
}
fo<<sol<<"\n";
return 0;
}