Cod sursa(job #109590)

Utilizator blasterzMircea Dima blasterz Data 25 noiembrie 2007 12:01:01
Problema Pairs Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 1.81 kb
using namespace std;
#include <cstdio>
#include <vector>
#include <fstream>
#include <set>
#include <bitset>
#define pb push_back
//bitset<1000001>primes;

bool primes[1000001];
//bitset<1000001>used;
bool used[1000001];
int n=1000000;
int a[100001];
vector<int>A[1000001];
int N;
//set<int> poz[1000001];

vector<int>poz2[1000001];
void ciur()
{
  int i, j;

  for(i=2;i<=n;++i)
    if(!primes[i]) 
      for(j=i; j<=n;j+=i) 
	{
	  //  printf("%d %d\n", i, j);
	  if(used[j]) A[i].pb(j), poz2[j].pb(i);
	   primes[j]=1;
	   //if(used[j]) poz2[j].pb(i);//poz[j].insert(i);
	}
 
  /*
  for(i=2;i<=10;++i)
    {
      for(vector<int>::iterator it=A[i].begin();it!=A[i].end();++it)printf("%d ", *it);
      printf("\n");
    }
  */

}


void read()
{

  ifstream f("pairs.in");
  f>>N;
  for(int i=1;i<=N;++i) f>>a[i];

  for(int i=1;i<=N;++i) used[a[i]]=1;
  f.close();
}

//int use[1000001];
bitset<1000001>use;
void solve()
{
  int i, j, p,t, aa;
  long long nr=0;
  vector<int>::iterator it;
  vector<int>::iterator jt;
  for(i=1;i<=N;++i)
    {
      
      aa=a[i];
      set<int>Sol;
      //  vector<int>Q;
      t=0;
      for(it=poz2[aa].begin();it!=poz2[aa].end();++it)
	{
	  p=*it;
	  for(jt=A[p].begin();jt!=A[p].end();++jt)
	    if(use[*jt]==1);
	    else ++t,use[*jt]=1;//	    Q.pb(*jt);//    Sol.insert(*jt);
      
	 }
      
      //printf("%d\n", poz[a[i]].size());
     
      for(it=poz2[aa].begin();it!=poz2[aa].end();++it)
	{
	  p=*it;
	  for(jt=A[p].begin();jt!=A[p].end();++jt)
	    use[*jt]=0;//	    Q.pb(*jt);//    Sol.insert(*jt);
	  
	}
      //t=Sol.size();
      t=N-t;
      //printf("%d\n", t);
      // printf("%d : %d %d\n", a[i],N, t);
      nr+=(long long)t;
    
      
      
    }

  freopen("pairs.out","w",stdout);
  printf("%lld\n", nr/2);
	  
 


}


int main()
{
  read();
  ciur();
  solve();
  return 0;
}