Cod sursa(job #131232)

Utilizator TabaraTabara Mihai Tabara Data 3 februarie 2008 14:27:38
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <stdio.h>

#define in "economie.in"
#define out "economie.out"
#define NMAX 1005
#define VMAX 50005

int SOL[NMAX], ind;
int A[NMAX];
int OK[VMAX];

int n;
void QSort( int, int );

int main()
{
    freopen( in, "r", stdin );
    freopen( out, "w", stdout );
    
    scanf( "%d", &n );
    int i,j;
    for ( i = 1; i <= n; ++i )
        scanf( "%d", &A[i] ); 
    
    QSort( 1, n );
    /*
    for ( i = 1; i <= n; ++i )
        printf( "%d ", A[i] );
    */
    for ( i = 1; i <= VMAX; ++i ) //dimensiunea asta ar putea fi mai mare ?
        OK[i] = 1;            
    
    for ( i = 1; i <= n; ++i )
    {
        if ( OK[A[i]] == 1)
        {
             SOL[++ind] = A[i];
             j = 2;
             while ( A[i] * j <= VMAX  ) 
             { 
                   OK[A[i]*j] = 0; 
                   j++; 
             }
        }
    }
    
    printf( "%d\n", ind );
    for ( i = 1; i <= ind; ++i ) 
        printf( "%d\n", SOL[i] );
    return 0;

}

void QSort( int st, int dr )
{
     int pivot = A[st];
     int i = st - 1, j = dr + 1;
     do
     {
         do { i++; } while ( A[i] < pivot );
         do { j--; } while ( A[j] > pivot );
         if ( i <= j )
         {
              int aux = A[i];
              A[i] = A[j];
              A[j] = aux;
         }
     } while ( i <= j );
     
     if ( i < dr ) QSort( i, dr );
     if ( st < j ) QSort( st, j );
}