#!/bin/csh # # factor.csh - Matt Mahoney, mmahoney@cs.fit.edu, Feb. 8, 2004 # # factor.csh works like the UNIX factor command. If a number is # given on the command line, the the program prints it and its prime # factors in ascending order, e.g. # # factor.csh 24 # 24 # 2 # 2 # 2 # 3 # # If there is no argument, then the numbers are repeatedly read from # input until 0 is entered, and the factors of each are printed. # If any number is negative, then the program prints "Ouch!". # Only numbers within the range of a 32 bit signed integer # (2147483647) can be factored correctly. if ($#argv > 1) then echo "Usage: factor number" exit endif set in = () # line of input while ( 1 ) # input loop, get n to factor if ($#argv >= 1) then # use number on command line set n = $1 echo $n else # get a list of numbers from input while ($#in == 0) set in = ( `echo $<` ) # split input into words on whitespace end set n = $in[1] shift in endif # Treat n < 2 as a special case if ($n < 0) echo "Ouch\!" if ($n == 0) echo " " 0 if ($n == 1) echo " " 1 # Factor n by testing for divisibility by 2,3,5,7,9,11...sqrt(n) # and removing factors as they are found while ($n > 1 && $n % 2 == 0) # print factors of 2 echo " " 2 @ n /= 2 end set f = 3 # print odd factors up to sqrt(n) while ($f * $f <= $n) if ($n % $f == 0) then echo " " $f @ n /= $f else @ f += 2 endif end if ($n > 1) echo " " $n # leftover factors? echo # More input? if ($n == 0 || $#argv >= 1) exit end