Cod sursa(job #121671)

Utilizator alexeiIacob Radu alexei Data 9 ianuarie 2008 13:52:50
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>
int poz,sir[1001],sol[1001];

int verif(int val,int p)
{int i,j;
 for(i=1; i<=p; ++i)
{    
     if(val%sol[i]==0)
      return 0;
     
        for(j=1; j<=p; ++j)
            { if(i!=j)
               if((val-sol[j])%sol[i]==0){                   
               return 0;}
               }

}     
 return 1;
}


 void rez(int inc,int sf,int &poz)
{char ok='0';
 int i1=0,j1=-1,c;
  while(inc<sf)
   {  if(sir[inc]>sir[sf])
      { sir[sf]^=sir[inc];
        sir[inc]^=sir[sf];
        sir[sf]^=sir[inc];
        c=i1;
        i1=-j1;
        j1=-c;
        }
        inc+=i1;
        sf+=j1;
    }     
poz=inc;
}
void quick(int inc,int sf)
{
  if(inc<sf)
  { rez(inc,sf,poz);
    quick(inc,poz-1);
    quick(poz+1,sf);
  }

}

int main()
{
    
    freopen("economie.in","r",stdin);
    freopen("economie.out","w",stdout);
    
    int n,i,p=0;
    
    scanf("%d",&n);
    
    for(i=1; i<=n; i++)
     scanf("%d",&sir[i]);
     quick(1,n);
    int rez;
    int j;
  if(sir[1]!=1)  
  { sol[++p]=sir[1];
     for(i=2; i<=n; i++){
         if(sir[i]!=sir[i-1])      
           {
                if(verif(sir[i],p))                      
                   sol[++p]=sir[i];                    
           }                               
         }
     printf("%d\n",p); 
       for(i=1; i<=p; ++i)
        printf("%d\n",sol[i]);
     }
   else
    printf("1\n1\n");
     return 0;
}