Pagini recente » Cod sursa (job #992298) | preONI 2005 runda #2 - solutii | Cod sursa (job #489145) | Cod sursa (job #675835) | Cod sursa (job #2084039)
#include<bits/stdc++.h>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int n,nr;
int sol[1000002];
bool pr[1002];
int qq[550],np=1;
void Sieve()
{
qq[1]=2;
for(int i=4;i<=1000;i+=2)
pr[i]=1;
for(int i=3;i<=1000;i+=2)
if(!pr[i])
{
qq[++np]=i;
for(int j=i*i;j<=1000;j+=i)
pr[j]=0;
}
}
int main()
{
f>>n;
Sieve();
long long sl=0;
int MaxN=0;
for(int i=1;i<=n;++i)
{
f>>nr;
MaxN=max(MaxN,nr);
for(int j=1;j*j<=nr;++j)
if(nr%j==0){
sol[j]++;
if(j!=nr/j)
++sol[nr/j];
}
}
for(int i=2;i<=MaxN;++i)
{
bool ok=1;
int nfp=0;
int Orez=i;
for(int j=1;qq[j]!=0 && Orez>1;++j)
if(Orez%qq[j]==0)
{
++nfp;
int ex=0;
while(Orez%qq[j]==0)
Orez/=qq[j],++ex;
if(ex>=2)
{
ok=0;
break;
}
}
if(ok){
if(Orez>1)
++nfp;
if(nfp%2==1)
sl+=1ll*sol[i]*(sol[i]-1)/2;
else
sl-=1ll*sol[i]*(sol[i]-1)/2;
}
}
sl=1ll*n*(n-1)/2-sl;
g<<sl;
return 0;
}