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