Pagini recente » Cod sursa (job #81295) | Cod sursa (job #801712) | Cod sursa (job #2287253) | Cod sursa (job #337425) | Cod sursa (job #3255429)
#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;
bool f[valmax + 5];
int x[valmax + 5];
int dz[1005];
bool p[valmax + 5];
int b[16];
void bk(int pas,int 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;
}