diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2008-01-05 16:36:56 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2008-01-05 16:36:56 +0000 |
commit | 4887a05481e143bfc4796230605d0a9ff7f2cb5a (patch) | |
tree | 495dce9e5a774e6826fa09f2651ae3c8c546822d /misc/pascal/tests/src/104-primes.pas | |
parent | 9684605c30d1f7f2f7120d8c1b5645e7ca4eb54f (diff) | |
download | nuttx-4887a05481e143bfc4796230605d0a9ff7f2cb5a.tar.gz nuttx-4887a05481e143bfc4796230605d0a9ff7f2cb5a.tar.bz2 nuttx-4887a05481e143bfc4796230605d0a9ff7f2cb5a.zip |
Pascal Tests
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@504 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'misc/pascal/tests/src/104-primes.pas')
-rw-r--r-- | misc/pascal/tests/src/104-primes.pas | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/misc/pascal/tests/src/104-primes.pas b/misc/pascal/tests/src/104-primes.pas new file mode 100644 index 000000000..15adaabf3 --- /dev/null +++ b/misc/pascal/tests/src/104-primes.pas @@ -0,0 +1,43 @@ +{ generate the primes between 3..10000 using a
+ sieve containing odd integers in this range. }
+
+program primes(output);
+
+const
+ wdlength = 59; {implementation dependent}
+ maxbit = 58;
+ w = 84; {w=n div wdlength div 2}
+
+var
+ sieve, primes : array[0..w] of set of 0..maxbit;
+ next : record word,bit : integer
+ end;
+ j,k,t,c : integer; empty:boolean;
+
+begin {initialize}
+ for t:=0 to w do
+ begin sieve[t] := [0..maxbit]; primes[t] := [] end;
+ sieve[0] := sieve[0]-[0]; next.word := 0;
+ next.bit := 1; empty := false;
+
+ with next do
+ repeat {find next prime}
+ while not(bit in sieve[word]) do bit := succ(bit);
+ primes[word] := primes[word] + [bit];
+ c := 2*bit + 1;
+ j := bit; k := word;
+ while k<=w do {eliminate}
+ begin sieve[k] := sieve[k] - [j];
+ k := k + word*2; j := j + c;
+ while j>maxbit do
+ begin k := k+1; j := j - wdlength
+ end
+ end;
+ if sieve[word]=[] then
+ begin empty := true; bit := 0
+ end;
+ while empty and (word<w) do
+ begin word := word+1; empty := sieve[word]=[]
+ end
+ until empty; {ends with}
+end.
|