Ho sviluppato un programma che calcola i primi numeri primi contenuti nei primi n numeri (inseriti a piacimento dall'utente).

Questo è il codice:

codice:
#include <stdlib.h>
#include <stdio.h>

int main()
{
 long i=0, j=2, k=1, n=0, h=0;
 long *a, *b;
 FILE *out;

scanf("%d", &n);
a = (long *)calloc(n, sizeof(long));
b = (long *)calloc(n, sizeof(long));
out = fopen("Numeri.txt", "w");

for (i = 0; i <= n+1; i++)
    {
     a[i] = i;
    }

b[1] = 1;
i = 2;

while(j < n)
{

 while(a[j] == 0 && j < n)
         j++;
 
 if(a[j] != 0)
 {
         b[i]=a[j];
         i++;
 }
 
 for(k = 1; k <= n/j; k++)
       {
        a[k*j] = 0;
       }
 
 j++;
        
}

h = i;

for (i = 1; i < h; i++)
    {
     fprintf(out, "%d\t", b[i]);
    }
fclose(out);

return 0;
}
Il programma funziona se viene visualizzato a shell.
Invece se stampo l'output sul file di testo e richiedo un n > 1000 non mi vengono visualizzati i numeri all'interno del file.

Ritengo ci sia qualche errore nell'allocazione della memoria, o qualcosa di simile.
Sapreste aiutarmi?

N.B. Ho notato inoltre che se tento di stampare il risultato per n >= 9999 non viene visualizzato nemmeno dalla shell.