Mercurial > octave-nkf
comparison scripts/miscellaneous/list_primes.m @ 68:46807fe3db5b
[project @ 1993-08-19 02:50:52 by jwe]
Initial revision
author | jwe |
---|---|
date | Thu, 19 Aug 1993 02:50:52 +0000 |
parents | |
children | 16a24e76d6e0 |
comparison
equal
deleted
inserted
replaced
67:2876864f1fdb | 68:46807fe3db5b |
---|---|
1 function retval = list_primes (n) | |
2 | |
3 # usage: list_primes (n) | |
4 # | |
5 # List the first n primes. If n is unspecified, the first 30 primes | |
6 # are listed. | |
7 # | |
8 # The algorithm used is from page 218 of the TeXbook. | |
9 | |
10 if (nargin > 0) | |
11 if (! is_scalar (n)) | |
12 error ("list_primes: argument must be a scalar"); | |
13 endif | |
14 endif | |
15 | |
16 if (nargin == 0) | |
17 n = 30; | |
18 endif | |
19 | |
20 if (n == 1) | |
21 retval = 2; | |
22 return; | |
23 endif | |
24 | |
25 if (n == 2) | |
26 retval = [2; 3]; | |
27 return; | |
28 endif | |
29 | |
30 retval = zeros (1, n); | |
31 retval (1) = 2; | |
32 retval (2) = 3; | |
33 | |
34 n = n - 2; | |
35 i = 3; | |
36 p = 5; | |
37 while (n > 0) | |
38 | |
39 is_prime = 1; | |
40 is_unknown = 1; | |
41 d = 3; | |
42 while (is_unknown) | |
43 a = fix (p / d); | |
44 if (a <= d) | |
45 is_unknown = 0; | |
46 endif | |
47 if (a * d == p) | |
48 is_prime = 0; | |
49 is_unknown = 0; | |
50 endif | |
51 d = d + 2; | |
52 endwhile | |
53 | |
54 if (is_prime) | |
55 retval (i++) = p; | |
56 n--; | |
57 endif | |
58 p = p + 2; | |
59 | |
60 endwhile | |
61 | |
62 endfunction |