# HG changeset patch # User John W. Eaton # Date 1260816611 18000 # Node ID d1cc2e0ddf55807ee3b252c00d5ec20b54d62028 # Parent 2d347a2f4a0a85f036360f579d65edb15dc88539 isprime: produce logical result diff --git a/scripts/ChangeLog b/scripts/ChangeLog --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,8 @@ +2009-12-14 John W. Eaton + + * specfun/isprime.m: Produce logical result. Error if nargin > 1. + New tests. + 2009-12-14 John W. Eaton * help/__makeinfo__.m: Use fullfile to concatenate file name diff --git a/scripts/specfun/isprime.m b/scripts/specfun/isprime.m --- 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)