68
|
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 |