Pagini recente » Cod sursa (job #458089) | Cod sursa (job #2464170) | Cod sursa (job #2871389) | Cod sursa (job #2463239) | Cod sursa (job #3219009)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
const int valmax = 1000000;
const int sqvalmax = 1000;
const int nmax = 100000;
int n;
int v[nmax + 5];
bool c[sqvalmax+5];
vector <int> dvz;
int bk[16];
int nr[16];
long long sol;
int tot[valmax + 5];
void prim()
{
c[0]=1;
c[1]=1;
for(int i=2; i<=sqvalmax; i++)
if(!c[i])
{
dvz.push_back(i);
for(int j=i*2; j<=sqvalmax; j+=i)
c[j]=true;
}
}
void desc(int val)
{
nr[0]=0;
for(auto& j : dvz)
{
if(j*j>val)
break;
if(val%j==0)
{
while(val%j==0)
val/=j;
nr[++nr[0]] = j;
}
}
if(val!=1)
nr[++nr[0]]=val;
}
void bkt(int pas,long long prod = 1)
{
if(prod!=1)
{
if(pas%2)
sol+=tot[prod];
else
sol-=tot[prod];
tot[prod]++;
}
if(pas==nr[0]+1)
return;
for(int i = bk[pas-1]+1; i<=nr[0]; i++)
{
bk[pas]=i;
bkt(pas+1,prod*nr[bk[pas]]);
}
}
int main()
{
prim();
fin>>n;
for(int i=1; i<=n; i++)
{
sol+=i-1;
fin>>v[i];
desc(v[i]);
bkt(1);
}
fout<<sol;
}