X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fm%2Fmiscellaneous%2Flist_primes.m;fp=octave_packages%2Fm%2Fmiscellaneous%2Flist_primes.m;h=58a87a02d8e51e792c0cc6c692f9f56d4aa89f38;hp=0000000000000000000000000000000000000000;hb=1c0469ada9531828709108a4882a751d2816994a;hpb=63de9f36673d49121015e3695f2c336ea92bc278 diff --git a/octave_packages/m/miscellaneous/list_primes.m b/octave_packages/m/miscellaneous/list_primes.m new file mode 100644 index 0000000..58a87a0 --- /dev/null +++ b/octave_packages/m/miscellaneous/list_primes.m @@ -0,0 +1,91 @@ +## Copyright (C) 1993-2012 John W. Eaton +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} list_primes () +## @deftypefnx {Function File} {} list_primes (@var{n}) +## List the first @var{n} primes. If @var{n} is unspecified, the first +## 25 primes are listed. +## +## The algorithm used is from page 218 of the @TeX{}book. +## @seealso{primes, isprime} +## @end deftypefn + +## Author: jwe + +function retval = list_primes (n) + + if (nargin > 0) + if (! isscalar (n)) + error ("list_primes: argument must be a scalar"); + endif + endif + + if (nargin == 0) + n = 25; + endif + + if (n == 1) + retval = 2; + return; + endif + + if (n == 2) + retval = [2; 3]; + return; + endif + + retval = zeros (1, n); + retval (1) = 2; + retval (2) = 3; + + n = n - 2; + i = 3; + p = 5; + while (n > 0) + + is_prime = 1; + is_unknown = 1; + d = 3; + while (is_unknown) + a = fix (p / d); + if (a <= d) + is_unknown = 0; + endif + if (a * d == p) + is_prime = 0; + is_unknown = 0; + endif + d = d + 2; + endwhile + + if (is_prime) + retval (i++) = p; + n--; + endif + p = p + 2; + + endwhile + +endfunction + +%!test +%! assert (list_primes(), [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,\ +%! 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]); +%! assert (list_primes(5), [2, 3, 5, 7, 11]); +