5 double big = 9.007199254740992e15;
9 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
10 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
11 73, 79, 83, 89, 97,101,103,107,109,113,
12 127,131,137,139,149,151,157,163,167,173,
13 179,181,191,193,197,199,211,223,227,229,
17 10, 2, 4, 2, 4, 6, 2, 6, 4, 2,
18 4, 6, 6, 2, 6, 4, 2, 6, 4, 6,
19 8, 4, 2, 4, 2, 4, 8, 6, 4, 6,
20 2, 4, 6, 2, 6, 6, 4, 2, 4, 6,
21 2, 6, 4, 2, 4, 2,10, 2,
26 1, 2, 4, 8, 16, 32, 64, 128,
32 tabsiz = nelem(table),
36 void mark(double nn, long k);
41 fprint(2, "usage: %s [start [finish]]\n", argv0);
48 fprint(2, "limits exceeded\n");
53 main(int argc, char *argv[])
56 double k, temp, v, limit, nn;
70 Binit(&bin, 0, OREAD);
71 while ((l = Brdline(&bin, '\n')) != nil) {
76 sysfatal("negative start");
82 limit = atof(argv[1]);
96 if(nn < 0 || nn > big)
102 for(i=0; i<ptsiz; i++) {
107 print("%d\n", pt[i]);
117 * clear the sieve table.
120 for(i = 0; i < tabsiz; i++)
129 for(i = 0, k = 11; k <= v; k += wheel[i]) {
136 * now get the primes from the table
139 for(i = 0; i < tsiz8; i += 2) {
140 if(table[i>>3] & bittab[i&07])
145 print("%.0f\n", temp);
154 mark(double nn, long k)
163 for(; j < tsiz8; j += k)
164 table[j>>3] |= bittab[j&07];