/* Prime number generator. Generates all primes less than a command line */ /* parameter or 2^32 by default, output them on stdout. */ #include <math.h> #include "primetab.cc" #include <string.h> /*ARGSUSED*/ int main (int argc, char **argv) { long unsigned ixt[sizeof(primetable)>>2],*ix,i,j,nsp,n=0,max,m; char sieve[1<<17],*sp; if(argv[1]){ max=atoi(argv[1]); for(nsp=0;primetable[nsp]<=(unsigned)sqrt(max);nsp++);} else{nsp=sizeof(primetable)>>2;max=0xffffffff;}; printf("%u\n",2); for(i=0;i<nsp;i++)ixt[i]=((primetable[i]*3+1)>>1)+(1<<17); for(j=0;j<1<<14;j++){ memset(sieve,1,1<<17); for(ix=ixt+nsp-1;ix>=ixt;ix--) for(*ix-=1<<17;*ix<1<<17;*ix+=*(primetable+(ix-ixt))) sieve[*ix]=0; for(i=0;i<(1<<17);i++)if(sieve[i]) {if((m=((j<<17)+i)<<1)>max)return 0; else if(m>2)printf("%ld\t",m-1);/*n++;*/} } }