Pagini recente » Cod sursa (job #2373155) | Cod sursa (job #209622) | Cod sursa (job #1397915) | Cod sursa (job #1208580) | Cod sursa (job #3255449)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
const int valmax = 1000000;
long long n;
long long sol;
long long mx;
bool f[valmax + 5];
long long x[valmax + 5];
long long dz[1005];
bool p[1010 + 5];
long long b[16];
long long nr[16];
void bk(int pas,long long 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[i]]);
}
}
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;
}
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;
}