1#!/usr/bin/mawk -f
2
3# primes.awk
4#
5#  mawk -f primes.awk  [START]  STOP
6# find all primes    between 2 and STOP
7#       or START and STOP
8#
9
10
11
12function usage()
13{ ustr = sprintf("usage: %s  [start] stop", ARGV[0])
14  system( "echo " ustr)
15  exit 1
16}
17
18
19BEGIN { if (ARGC == 1 || ARGC > 3 ) usage()
20        if ( ARGC == 2 )  { start = 2  ; stop = ARGV[1]+0 }
21	else
22	if ( ARGC == 3 )  { start = ARGV[1]+0 ; stop = ARGV[2]+0 }
23
24   if ( start < 2 ) start = 2
25   if ( stop < start ) stop = start
26
27   prime[ p_cnt = 1 ] =  3  # keep primes in prime[]
28
29# keep track of integer part of square root by adding
30# odd integers
31   odd = test = 5
32   root = 2
33   squares = 9
34
35
36while ( test <= stop )
37{
38   if ( test >= squares )
39   { root++
40     odd += 2
41     squares += odd
42   }
43
44   flag = 1
45   for ( i = 1 ; prime[i] <= root ; i++ )
46   	if ( test % prime[i] == 0 )  #  not prime
47	{ flag = 0 ; break }
48
49   if ( flag )  prime[ ++p_cnt ] = test
50
51   test += 2
52}
53
54prime[0] = 2
55
56for( i = 0 ; prime[i] < start ; i++)  ;
57
58for (  ;  i <= p_cnt ; i++ )  print prime[i]
59
60}
61
62
63
64