Pagini recente » Cod sursa (job #1225396) | Cod sursa (job #2256231) | Cod sursa (job #2086891) | Cod sursa (job #1680098) | Cod sursa (job #286842)
Cod sursa(job #286842)
#include <fstream>
using namespace std;
#define dim 1000090
#define abs(x) (x>0)?(x):(-x)
typedef long long ll;
ifstream f("pairs.in");
ofstream g("pairs.out");
long n,mx=0,nr;
long divx[dim],p[dim];
bool ok[dim];
ll res;
void read()
{
long i;
for(i=1;i<=n;i++)
{
f>>nr;
ok[nr]=1;
if(mx<nr)
mx=nr;
}
}
void solve()
{
int j,i;
for(i=2;i<=mx;i++) //numar cati divizori are nr de la 2 la maxim
{
for(j=i;j<=mx;j+=i) //incep de la indice si continui cu multiplii sai
{
if(ok[j]) //daca il am in sir,divizorii indicelui cresc
divx[i]++;
}
}
for(i=2;i<=mx;i++)
{
if(p[i]==0)
{
for(j=2*i;j<=mx;j+=i)
if(p[j]!=-1&&j%(i*i))
p[j]++;
else
p[j]=-1;
}
}
for(i=2;i<=mx;i++)
{
if(p[i]>=0)
{
if(p[i]==0)
p[i]=1;
if(p[i]%2==1)
res+=(ll)(divx[i]*(divx[i]-1))/2;
else
res-=(ll)(divx[i]*(divx[i]-1))/2;
}
}
res=abs((ll)(n*(n-1))/2-res);
g<<res;
}
int main()
{
f>>n;
read();
solve();
return 0;
}