Pagini recente » Cod sursa (job #2853953) | Cod sursa (job #2578554) | Cod sursa (job #1420741) | Cod sursa (job #1763585) | Cod sursa (job #2310085)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int a[100005],v[1005],nr,maxim,b[1000005],nrc;
bool prim[1005],viz[1000005];
long long n,rez;
int descompunere(int x)
{
int i,nrd;
nrd=0;
for(i=1;v[i]*v[i]<=x;i++)
{
if(x%v[i]==0)
{
x=x/v[i];
nrd++;
if(x%v[i]==0)
{
return 0;
}
}
}
if(x>1)
{
nrd++;
}
return nrd;
}
int main()
{
int i,j;
f>>n;
for(i=1;i<=n;i++)
{
f>>a[i];
viz[a[i]]=1;
if(a[i]>maxim)
{
maxim=a[i];
}
}
for(i=2;i*i<=1000;i++)
{
if(prim[i]==0)
{
for(j=2;j<=1000/i;j++)
{
prim[i*j]=1;
}
}
}
for(i=2;i<=1000;i++)
{
if(prim[i]==0)
{
nr++;
v[nr]=i;
}
}
for(i=2;i<=maxim;i++)
{
for(j=i;j<=maxim;j=j+i)
{
if(viz[j]==1)
{
b[i]++;
}
}
}
for(i=2;i<=maxim;i++)
{
nrc=descompunere(i);
if(nrc>0)
{
if(nrc%2==0)
{
rez=rez-b[i]*(b[i]-1)/2;
}
else
{
rez=rez+b[i]*(b[i]-1)/2;
}
}
}
g<<n*(n-1)/2-rez;
return 0;
}