Pagini recente » Cod sursa (job #2921033) | Cod sursa (job #1938504) | Cod sursa (job #2930727) | Cod sursa (job #3031131) | Cod sursa (job #2426705)
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
bool gs[1000001];
int fr[1000001],v[100001],n,i,j,vmax,catipasi=0,prime[100001],cateprime,ci,diviz[30],sol;
bool ciur[2000001];
int main()
{
f>>n;
for(i=1; i<=n; i++)
{
f>>v[i];
if(v[i]>vmax) vmax=v[i];
gs[v[i]]=1;
}
for(i=2; i<=vmax; i++)
{
for(j=1; j<=vmax/i; j++)
{
if(gs[i*j]==1)
{
fr[i]++;
}
}
}
ciur[2]=0;
cateprime=1;
prime[1]=2;
for(j=2; j<=vmax/2; j++)
{
ciur[2*j]=1;
}
for(int d=3; d<=vmax; d+=2)
{
if(ciur[d]==0)
{
prime[++cateprime]=d;
for(j=3; j<=vmax/d; j+=2)
{
ciur[d*j]=1;
}
}
}
int catidiv;
for( i=1; i<=n; i++)
{
ci=v[i];
catidiv=0;
for(j=1; j<=cateprime; j++)
{
if(prime[j]*prime[j]>ci) break;
else
{
if(ci%prime[j]==0)
{
catidiv++;
diviz[catidiv]=prime[j];
while(ci%prime[j]==0)
{
ci=ci/prime[j];
}
}
}
}
if(ci>1)
{
diviz[++catidiv]=ci;
}
int val=1<<catidiv;
val--;
int prod=1;
for(j=1; j<=val; j++)
{
int cj=j;
int parimp=0;
int prod=1;
for(int d=catidiv; d>=1; d--)
{
if(cj%2==1)
{
parimp++;
prod*=diviz[d];
}
cj/=2;
}
if(parimp%2==1)
{
sol+=n-fr[prod];
}
else
{
sol=sol-(n-fr[prod]);
}
}
}
sol/=2;
g<<sol;
}