64 lines
1.5 KiB
Text
64 lines
1.5 KiB
Text
$ include "seed7_05.s7i";
|
|
|
|
const func boolean: isPrime (in integer: number) is func
|
|
result
|
|
var boolean: prime is FALSE;
|
|
local
|
|
var integer: count is 2;
|
|
begin
|
|
if number = 2 then
|
|
prime := TRUE;
|
|
elsif number > 2 then
|
|
while number rem count <> 0 and count * count <= number do
|
|
incr(count);
|
|
end while;
|
|
prime := number rem count <> 0;
|
|
end if;
|
|
end func;
|
|
|
|
var integer: currentPrime is 1;
|
|
var integer: primeNum is 0;
|
|
|
|
const func integer: getPrime is func
|
|
result
|
|
var integer: nextPrime is 0;
|
|
begin
|
|
repeat
|
|
incr(currentPrime);
|
|
until isPrime(currentPrime);
|
|
nextPrime := currentPrime;
|
|
incr(primeNum);
|
|
end func;
|
|
|
|
const proc: main is func
|
|
local
|
|
var integer: aPrime is 0;
|
|
var integer: count is 0;
|
|
begin
|
|
write("First twenty primes:");
|
|
while primeNum < 20 do
|
|
write(" " <& getPrime);
|
|
end while;
|
|
writeln;
|
|
repeat
|
|
aPrime := getPrime;
|
|
until aPrime >= 100;
|
|
write("Primes between 100 and 150:");
|
|
while aPrime <= 150 do
|
|
write(" " <& aPrime);
|
|
aPrime := getPrime;
|
|
end while;
|
|
writeln;
|
|
repeat
|
|
aPrime := getPrime;
|
|
until aPrime >= 7700;
|
|
while aPrime <= 8000 do
|
|
incr(count);
|
|
aPrime := getPrime;
|
|
end while;
|
|
writeln("Number of primes between 7,700 and 8,000: " <& count);
|
|
repeat
|
|
aPrime := getPrime;
|
|
until primeNum = 9999; # discard up to and including the 9,999 prime!
|
|
writeln("The 10,000th prime: " <& getPrime);
|
|
end func;
|