Buenas
creo que esto implementa lo que decis al principio:
int i,j,N=800;
int vec[800];
for(i = 0; i < N; i++)
vec[i] = 2*(i+1)+1;
for(i = 0; i < sqrt(N); i++)
if(vec[i] != -1)
for(j = (i + vec[i]); j < N; j += vec[i])
vec[j] = -1;
for(i=0; i<N; i++)
if(vec[i] != -1) printf(" %i", vec[i]);
Primero lleno el vector con los numeros impares, despues recorro el vector buscando los numeros que no tache, desde la posicion 0 hasta la raiz de N, despues desde la posision del SIGUIENTE multiplo del numero actual recorro el vector incrementando tantos lugares como el numero que busco los multiplos y lo cambio por -1.
Espero se entienda la idea
Saludos