Pagini recente » Cod sursa (job #2885505) | Cod sursa (job #617352) | Cod sursa (job #1052493) | Cod sursa (job #502660) | Cod sursa (job #1774431)
#include<bits/stdc++.h>
#define MaxVal 1000005
#define dim 1000000
using namespace std;
int n,maxim,x,seen[MaxVal],prime[MaxVal>>1],dp,j,nr,e,l,X[MaxVal],Y[MaxVal],k;
long long sol,perechi;
bool ciur[MaxVal];
bool ok;
char buff[dim+5];
int poz=0;
void citeste(int &numar)
{
numar=0;
while(buff[poz]<'0' || buff[poz]>'9')
{
poz++;
if(poz==dim)
{
poz=0;
fread(buff,1,dim,stdin);
}
}
while(buff[poz]>='0' && buff[poz]<='9')
{
numar=numar*10+buff[poz]-'0';
poz++;
if(poz==dim)
{
poz=0;
fread(buff,1,dim,stdin);
}
}
}
inline int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
// scanf("%d",&n);
fread(buff,1,dim,stdin);
citeste(n);
for(int i=1;i<=n;i++)
{
citeste(x);
seen[x]=1;
maxim=max(maxim,x);
}
for(int i=2;(i*i)<=maxim;i++)
{
if(!ciur[i])
{
for(int j=(i<<1);j<=maxim;j+=i)
{
ciur[j]=1;
}
}
}
for(int i=2;i<=maxim;i++)
{
if(!ciur[i])
{
prime[++dp]=i;
}
}
for(int i=2;i<=maxim;i++)
{
x=i;
j=1;
ok=1;
nr=0;
while(j<=dp && x>1 && ok)
{
e=0;
if(!(x%prime[j])) nr++;
while(!(x%prime[j]))
{
e++;
x/=prime[j];
}
if(e>1)
{
ok=0;
}
j++;
}
if(ok)
{
l++;
X[l]=i;
Y[l]=nr;
}
}
long long sol=0;
for(int i=1;i<=l;i++)
{
k=X[i];
nr=0;
for(int j=k;j<=maxim;j+=k)
{
nr=nr+seen[j];
}
long long perechi=(nr*(nr-1))>>1;
if(!(Y[i]&2)) sol=sol+perechi;
else sol-=perechi;
}
sol=((n*(n-1))>>1)-sol;
printf("%lld\n",sol);
return 0;
}