*! isprime v1.0.1
*! 17 April 2014
*! Alfonso Sanchez-Penalver
capture program drop isprime
program define isprime, rclass
version 10.1
syntax anything(name=num) [, Print]
** Checks and Balances
* Check whether the argument is an integer
capture confirm integer number `num'
if _rc {
di as error "number has to be an integer."
error 198
}
** Finding if number is prime
tempname p
scalar `p' = 1
* Notice that 2 and 3 are primes but that the square root of both of them
* are less than 2 so if those values are passed this loop will never be run
* and the program will return true, i.e. 1
local max = floor(sqrt(`num'))
forval i = 2(1)`max' {
if mod(`num',`i') == 0 {
scalar `p' = 0
continue, break
}
}
** Displaying results
if "`print'" == "print" {
if `p' == 0 di as result `num' as text " is not a prime number."
else di as result `num' " is a prime number."
}
** Returning values
return scalar prime = `p'
return scalar rnum = `num'
end
* 1.0.1 Allows abbreviation of print to at most p
* 1.0.0 Basic functionality, print had to be fully spelled