Pagini recente » Cod sursa (job #596362) | Cod sursa (job #2736830) | Cod sursa (job #790820) | Cod sursa (job #3214219) | Cod sursa (job #981527)
Cod sursa(job #981527)
#include <fstream>
#include <vector>
#define MAXN 100005
#define sqrtMAXM 1050
#define MAXM 1000005
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int n,v[MAXN],x,nrmul[MAXM],nr,semn[MAXM];
long long sol;
vector<int> prime,div;
bool noprime[sqrtMAXM];
int main()
{
int i,j,k;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
for(i=2;i<sqrtMAXM;i++){
if(!noprime[i]){
prime.push_back(i);
for(j=2*i;j<sqrtMAXM;j+=i)
noprime[j]=1;}}
for(i=1;i<=n;i++){
x=v[i];
div.clear();
for(j=0;prime[j]*prime[j]<=x;j++)
if(!(x%prime[j])){
div.push_back(prime[j]);
while(!(x%prime[j]))
x/=prime[j];}
if(x>1)
div.push_back(x);
for(j=0;j<(1<<(div.size()));j++){
nr=1;
for(k=0;k<div.size();k++)
if(j&(1<<k))
nr*=div[k];
nrmul[nr]++;
if(!semn[nr]){
x=1;
for(k=0;k<div.size();k++)
if(j&(1<<k))
x=-x;
semn[nr]=x;}}}
for(i=1;i<MAXM;i++)
sol+=1LL*nrmul[i]*(nrmul[i]-1)*semn[i]/2;
g<<sol<<'\n';
f.close();
g.close();
return 0;
}