Git init
[external/mawk.git] / examples / primes.awk
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
12 function usage()
13 { ustr = sprintf("usage: %s  [start] stop", ARGV[0])
14   system( "echo " ustr) 
15   exit 1
16 }
17
18
19 BEGIN { 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    
36 while ( 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
54 prime[0] = 2
55
56 for( i = 0 ; prime[i] < start ; i++)  ;
57
58 for (  ;  i <= p_cnt ; i++ )  print prime[i]
59
60 }
61
62
63