Pagini recente » Cod sursa (job #2589258) | Cod sursa (job #282148) | Cod sursa (job #1697030) | Cod sursa (job #509646) | Cod sursa (job #3255430)
#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;
bool f[valmax + 5];
long long x[valmax + 5];
long long dz[1005];
bool p[valmax + 5];
long long b[16];
void bk(int pas,long long prod){
if(pas!=1)
{
if(prod%2)
sol+=(1LL*x[prod]*(x[prod]-1))/2;
else
sol-=(1LL*x[prod]*(x[prod]-1))/2;
}
for(int i = b[pas-1] + 1;i<=dz[0];i++){
b[pas]=i;
if(prod * dz[i] <=valmax)
bk(pas+1,prod*dz[i]);
}
}
void preprocess()
{
p[0]=p[1]=true;
int q = 1000;
for(int i = 2; i<=q;i++)
if(!p[i]){
dz[++dz[0]]=i;
for(int j = 2* i;j<=q;j+=i)
p[j]=true;
}
}
int main()
{
preprocess();
fin>>n;
for(int i=1;i<=n;i++)
{
int x;
fin>>x;
f[x]=true;
}
for(int i=1;i<=valmax;i++)
for(int j = i;j<=valmax;j+=i)
x[i]+=f[j];
sol=1LL*(n-1)*n/2;
bk(1,1);
fout<<sol;
}