Cod sursa(job #210422)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 27 septembrie 2008 18:52:10
Problema Pairs Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
const int NMAX=1000001;
int N,x[NMAX],Max;
long long sol,aux;
bitset<NMAX> P,D,R;
/*x[i]=nr de el ale multimii ce se divid prin i
  P[i]=0 daca i este prim,1 altfel
  D[i]=0 daca i are un numar par de divizori primi,1 altfel
  R[i]=0 daca fiecare factor prim din desc lui i apare la puterea 1,1 altfel*/
int max(int A,int B){
    return A>B?A:B;
    }
int main(){
    int i,j;
    f>>N;
    for (i=1,Max=0;i<=N;++i)
     f>>j,x[j]=1,Max=max(Max,j);
    sol=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=x[i]*(x[i]-1)/2;
      if (!D[i]) sol+=aux;
            else sol-=aux;
    }
    g<<sol;    
    return 0;
}