Pagini recente » Cod sursa (job #2178894) | Cod sursa (job #1498430) | Cod sursa (job #3145967) | Cod sursa (job #1323957) | Cod sursa (job #2310082)
#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;i<=nr;i++)
{
if(x%v[i]==0)
{
x=x/v[i];
nrd++;
if(x%v[i]==0)
{
return 0;
}
}
}
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;
}