Cod sursa(job #328344)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 1 iulie 2009 18:44:10
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream.h>   
ifstream f1 ("pairs.in");   
ofstream f2 ("pairs.out");   
int apar[1000001],calc[1000001],max=-1000001;   
void calc_prim()   
{   
    long long i,j;   
    calc[1]=-1;   
    for(i=2;i<=max;i++)   
    if(calc[i]==0)   
    for(j=i;j<=max;j+=i)   
    if(calc[j]!=-1)   
    {   
      calc[j]++;   
      if((j/i)%i==0) calc[j]=-1;   
    }   
}   
int main()   
{   
    long long i,j,div,n,k,nr=0;   
    f1>>n;   
    for(i=1;i<=n;i++)   
    {   
     f1>>k;   
     if(k>max)   
     max=k;   
     apar[k]=1;   
    }   
    calc_prim();   
    for(i=2;i<=max;i++)   
    {   
      div=0;   
      if(calc[i]<=0) continue;   
       else for(j=i;j<=max;j=j+i) if(apar[j]) div++;   
      if(calc[i]%2==1) nr+=div*(div-1)/2;   
       else nr-=div*(div-1)/2;   
  
    }   
    nr=n*(n-1)/2-nr;   
    f2<<nr;   
    return 0;   
}