Mercurial > hg > octave-shane
changeset 9984:d1cc2e0ddf55
isprime: produce logical result
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 14 Dec 2009 13:50:11 -0500 |
parents | 2d347a2f4a0a |
children | 43a29eeda994 |
files | scripts/ChangeLog scripts/specfun/isprime.m |
diffstat | 2 files changed, 29 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,8 @@ +2009-12-14 John W. Eaton <jwe@octave.org> + + * specfun/isprime.m: Produce logical result. Error if nargin > 1. + New tests. + 2009-12-14 John W. Eaton <jwe@octave.org> * help/__makeinfo__.m: Use fullfile to concatenate file name
--- a/scripts/specfun/isprime.m +++ b/scripts/specfun/isprime.m @@ -1,4 +1,4 @@ -## Copyright (C) 2000, 2006, 2007 Paul Kienzle +## Copyright (C) 2000, 2006, 2007, 2009 Paul Kienzle ## ## This file is part of Octave. ## @@ -18,14 +18,13 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} isprime (@var{n}) -## ## Return true if @var{n} is a prime number, false otherwise. ## ## Something like the following is much faster if you need to test a lot ## of small numbers: ## ## @example -## @var{t} = ismember (@var{n}, primes (max (@var{n} (:)))); +## @var{t} = ismember (@var{n}, primes (max (@var{n} (:)))); ## @end example ## ## If max(n) is very large, then you should be using special purpose @@ -36,22 +35,29 @@ function t = isprime (n) - if (nargin < 1) + if (nargin == 1) + if (! isscalar (n)) + nel = numel (n); + t = zeros (size (n), "logical"); + for i = 1:nel + t(i) = isprime (n(i)); + endfor + elseif (n != fix (n) || n < 2) + t = logical (0); + elseif (n < 9) + t = all (n != [4, 6, 8]); + else + q = n./[2, 3:2:sqrt(n)]; + t = all (q != fix (q)); + endif + else print_usage (); endif - if (! isscalar (n)) - nel = numel (n); - t = n; - for i = 1:nel - t(i) = isprime (t(i)); - endfor - elseif (n != fix (n) || n < 2) - t = 0; - elseif (n < 9) - t = all (n != [4, 6, 8]); - else - q = n./[2, 3:2:sqrt(n)]; - t = all (q != fix (q)); - endif endfunction + +%!assert (isprime (4), logical (0)); +%!assert (isprime (3), logical (1)); +%!assert (isprime (magic (3)), logical ([0, 0, 0; 1, 1, 1; 0, 0, 1])); +%!error isprime () +%!error isprime (1, 2)