Cod sursa(job #282674)

Utilizator vlasceanuVlasceanu Razvan vlasceanu Data 18 martie 2009 01:23:16
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdlib>
#include <iostream>

using namespace std;
long sol[100000][2]; 
int  nr=0;

long cmmdc(long a, long b)
{
if((!a) || (!b)) return a+b;
if(a>b) return cmmdc(a%b,b);
return cmmdc(a,b%a);
}



bool e(long a,long b)
{
bool rr=false;
int i1=0;
while(i1<nr)
  {
    if ((sol[i1][0]==a) && (sol[i1][1]==b)) { rr=true; i1=nr;}
    else if ((sol[i1][0]==b) && (sol[i1][1]==a)) {rr=true; i1=nr;}
    i1++;
}
return rr;   
}

int main(int argc, char *argv[])
{   
    freopen("pairs.in","r",stdin);
    freopen("pairs.out","w",stdout);
    int m[100000],
        n,aux;
    scanf("%i",&n);
    scanf("%i",&aux);
    m[0]=aux;
    for (long i=1;i<n;i++)
    {
        scanf("%i",&m[i]);
        if ((cmmdc(aux,m[i])==1) && (!e(aux,m[i]))) 
        {
           sol[nr][0]=aux;
           sol[nr][1]=m[i];
           nr++;                     
        }
    }
     for (long i=1;i<n;i++)
     {
         for (long j=i+1;j<n;j++)
         {
             if (i!=j && m[i]!=m[j])
             if ((cmmdc(m[i],m[j])==1) && (!e(m[i],m[j]))) 
            {
              sol[nr][0]=m[i];
              sol[nr][1]=m[j];
              nr++;                     
             }
         }
     }
    cout << nr;   
    fclose(stdin);
    fclose(stdout);      
    return 0;
}