annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
68
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
1 function retval = list_primes (n)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
2
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
3 # usage: list_primes (n)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
4 #
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
5 # List the first n primes. If n is unspecified, the first 30 primes
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
6 # are listed.
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
7 #
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
8 # The algorithm used is from page 218 of the TeXbook.
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
9
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
10 if (nargin > 0)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
11 if (! is_scalar (n))
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
12 error ("list_primes: argument must be a scalar");
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
13 endif
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
14 endif
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
15
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
16 if (nargin == 0)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
17 n = 30;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
18 endif
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
19
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
20 if (n == 1)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
21 retval = 2;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
22 return;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
23 endif
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
24
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
25 if (n == 2)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
26 retval = [2; 3];
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
27 return;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
28 endif
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
29
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
30 retval = zeros (1, n);
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
31 retval (1) = 2;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
32 retval (2) = 3;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
33
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
34 n = n - 2;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
35 i = 3;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
36 p = 5;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
37 while (n > 0)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
38
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
39 is_prime = 1;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
40 is_unknown = 1;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
41 d = 3;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
42 while (is_unknown)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
43 a = fix (p / d);
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
44 if (a <= d)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
45 is_unknown = 0;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
46 endif
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
47 if (a * d == p)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
48 is_prime = 0;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
49 is_unknown = 0;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
50 endif
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
51 d = d + 2;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
52 endwhile
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
53
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
54 if (is_prime)
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
55 retval (i++) = p;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
56 n--;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
57 endif
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
58 p = p + 2;
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
59
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
60 endwhile
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
61
46807fe3db5b [project @ 1993-08-19 02:50:52 by jwe]
jwe
parents:
diff changeset
62 endfunction