Cod sursa(job #230785)

Utilizator raptorvTamas Vlad raptorv Data 14 decembrie 2008 10:31:12
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
//============================================================================
// Name        : sprim.cpp
// Author      : Vlad Tamas
// Version     :
// Copyright   : 2008
// Description : Hello World in C++, Ansi-style
//============================================================================

#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;
}