Pagini recente » Cod sursa (job #2503774) | Cod sursa (job #2942330) | Cod sursa (job #1849424) | Cod sursa (job #3250337) | Cod sursa (job #112484)
Cod sursa(job #112484)
#include<fstream.h>
#include<math.h>
long v[100001],x[1000001],pc[1000001];
int prim(long x){
long i;
for(i=1;i<=sqrt(x);i++) if(x%pc[i]==0) return 0;
return 1;
}
int main(){
int b;
long n;
long i,j,p,res=0,q,k,t;
long max;
pc[0]=2;
pc[1]=2;
pc[2]=3;
ifstream f("pairs.in");
ofstream g("pairs.out");
f>>n;
max=-1;
for(i=1;i<=n;i++){ f>>q;
v[q]=1; if(q>max) max=q;
}
for(i=2;i<=max;i++){
for(j=1;j<=max/i;j++)
if(v[i*j]==1) x[i]++;
p=i;
b=0;
if(prim(p)==1 && x[p]>=1){b=1; res=res+(x[i]*(x[i]-1))/2;pc[0]++; pc[pc[0]]=i;}
if(x[p]>1 && b==0){
t=0;
for(k=1;k<=sqrt(p);k++)
if(p%pc[k]==0){ if((p/pc[k])%pc[k]==0){ t=-1; break;}
t++; p=p/pc[k];
if(p==1) break;}
if(t==0){res=res+(x[i]*(x[i]-1))/2; pc[0]++; pc[pc[0]]=i;}
else{
if(p==1) { if(t>0 && t%2==0) res=res-(x[i]*(x[i]-1))/2;
else if(t>0) res=res+(x[i]*(x[i]-1))/2;
}
}
}
}
g<<n*(n-1)/2 - res;
f.close();
g.close();
return 0;
}