// primesg.c  generate a file of primes

#include <stdio.h>

static long int primes[500001];
static int np = 0;    // initially, first prime is 2 at index zero
static int is_prime(int i);
static int numb = 500000;

int main(void)
{
  FILE * outp;
  int i, j, k, kk, ix, icount, sum;
  long fct;

  printf("primesg.c running \n");
  primes[0] = 2;
  printf("%d th prime is %ld \n", 1, primes[0]);
  for(i=3; np<numb; i++)
  {
    is_prime(i);
  }
  printf("%d th prime is %ld \n", np+1, primes[np]);

  outp = fopen("primef.h","w");
  fprintf(outp, "// primef.h\n");
  fprintf(outp, "static int np = %d; \n", np);
  fprintf(outp, "static long int primes[]={ \n");
  for(k=0; k<numb-1; k++)
  {
    fprintf(outp,"%ldl, ", primes[k]);
    if(k%7==0) fprintf(outp,"\n");
  }
  fprintf(outp,"%ldl};\n", primes[k]);

  printf("primesg.c finished, primef.h written \n");
  return 0;
}

static int is_prime(int i)
{
  int j;
  static int kp = 10;

  for(j=0; j<=np; j++)
    if(i%primes[j] == 0) return 0;

  np++;
  primes[np] = i; // build list of primes
  if(np+1==kp)
  {
     printf("the %dth  prime is %d \n", kp, i);
     if(kp<100000) kp = kp*10;
     else          kp = kp+100000;
  }
  return 1;       // does not need to be used or printed
} // end is_prime