Cod sursa(job #253346)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 18:12:28
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
 #include <fstream>  
 #include <stdio.h>  
 #include <iostream>  
 #define NMAX 1000001  
 using namespace std;  
   
   
 int N, x[NMAX]={0}, Max;  
 long long sol, aux;  
 char P[NMAX]={0}, D[NMAX]={0}, R[NMAX]={0};  
   
   
 int max(int A,int B)  
 {  
      return A>B?A:B;  
 }  
   
 int main() {  
   
   
     int i,j;  
   
     ifstream f("pairs.in");  
     ofstream g("pairs.out");  
     f>>N;  
     for (i=1, Max=0; i<=N; ++i)  
     {  
           f>>j;  
           x[j]=1;  
           Max=max(Max,j);  
     }  
   
     sol=(long long)N*(N-1)/2;  
           for (i=2; i<=Max; ++i)  
           {  
               for (j=2; j<=(Max/i); ++j) x[i]+=x[i*j];  
                     if (!P[i])  
                        for (j=2, D[i]=1; j<=(Max/i); ++j)  
                              {  
                                  P[j*i]=1;  
                                  D[j*i]=1-D[j*i];  
                                  if (j%i==0) R[j*i]=1;  
                               }  
   
               if (R[i]) continue;  
   
               aux=(long long)x[i]*(x[i]-1)/2;  
   
               if (!D[i]) sol+=aux;  
                     else sol-=aux;  
            }  
     g<<sol;  
     f.close();  
     g.close();  
     return 0;  
}