Pagini recente » Cod sursa (job #2506415) | Cod sursa (job #1512146) | Cod sursa (job #1601550) | Cod sursa (job #1559245) | Cod sursa (job #3255453)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
const int valmax = 1000000;
int n;
long long sol;
int x[valmax + 5];
int dz[1005];
bool p[1010 + 5];
int b[16];
int nr[16];
void preprocess()
{
p[0]=p[1]=true;
for(int i = 2; i<=1000; i++)
if(!p[i])
{
dz[++dz[0]]=i;
for(int j = 2* i; j<=1000; j+=i)
p[j]=true;
}
}
void desc(int x)
{
nr[0]=0;
for(int i=1; dz[i]*dz[i]<=x; i++)
if(x%dz[i]==0)
{
nr[++nr[0]]=dz[i];
while(x%dz[i]==0) x/=dz[i];
}
if(x!=1)
nr[++nr[0]]=x;
}
void bk(int pas,int prod)
{
if(pas!=1)
{
if(pas%2)
sol+=x[prod];
else
sol-=x[prod];
x[prod]++;
}
if(pas>nr[0])
return;
for(int i = b[pas-1] + 1; i<=nr[0]; i++)
{
b[pas]=i;
bk(pas+1,prod*nr[b[pas]]);
}
}
int main()
{
preprocess();
fin>>n;
for(int i=1; i<=n; i++)
{
sol+=i-1;
int x;
fin>>x;
desc(x);
bk(1,1);
}
fout<<sol;
}