Cita:  
					Iniciado por CalgaryCorpus 
  ...............................
Este par de multiplicaciones se puede reemplazar por 1 suma, debido a que el ciclo lo que hace es calcular los factores del numero i, es decir calcula 2*i, 3*i, 4*i, ... ( y asi sucesivamente ) y ese valor utiliza. 
 
En vez de multiplicar todas las veces, se puede guardar el valor anterior y descubrir el siguiente sólo sumando i, asi (ver variable "multiplo"):
...............................
    Bien observado lo de la multiplicación
CalgaryCorpus, ya lo he puesto en práctica. 
Y lo de inicializar fue un fallo de pasar un código previo, pero también bien observado.
 
Lo dejo con calloc para además de declarar, inicializar y con N de 10^8 con lo que tarda unos 7 segundos en mostrar el total de primos. Desactivo los printf para que "no pierda tiempo" en calcular el total de primos hasta N:    
Código C++:
Ver original#include <stdio.h>
#include <stdlib.h>
#define N 100000000 /* hasta aqui calculamos los primos */
 
int main() {
  int i, j, z, x = 0;
  int  *nums 
= calloc( N
+1, sizeof ( int ));   int *prims 
= calloc( N
+1, sizeof ( int ));   ///puts("\n\tSon PRIMOS:\n");
  ///printf( "\t%4d:::%5d\n", x, 2 );
  prims[x] = 2;
  x++;
  for( i = 3; i <= N; i += 2 )
    if( nums[i] == 0 ) {
      prims[x] = i;
      ///printf( "\t%4d:::%5d\n", x, i );
      x++;
      for( j = ( i <= N ); ( z = ( i * j ) )  <= N; j+=2)
        nums[z] = 1;
    }
  /*for( i = 0; i < x; i ++ )
    printf( "%4d", prims[i] );*/
  printf( "\n  Hasta %d hay %d numeros primos\n\n", N
, x 
);   return 0;
}
}
  
   EDITADO: 
Mirándolo bien amigo 
CalgaryCorpus acabo de darme cuenta de un par de detalles.  En tu for vas de multiplo = i+i con incrementos de multiplo += i. 
Como ejemplo, supongamos para i los valores de 3 y de 5. Aplicándoles el for los valores que tomarían serían de: 
3+3=6______5+5=10
+3=9-_____+5=15
+3=12_____+5=20
+3=15_____+5=25
+3=18_____+5=30
..................... 
donde se observa que toman de forma inútil valores pares, que de antemano sabemos que no son primos y arrancan siempre con valor par al ser i+i. La forma de evitarlo sería con un paso de 2*i y un valor inicial de 3*i . 
Y como ves tu intento de mejora para evitar la multiplicación de i * j se traduce en la introducción de nuevas multiplicaciones. Claro que al ser una de ellas de multiplicar por dos se podría optimizar más fácilmente. 
En cualquier caso es de agradecer y motiva que haya gente por ahí que se moleste en mirar con tanto detenimiento los códigos. Gracias por la atención que le has prestado. 
Un fuerte saludo.