Files
TDT4205/ps6/vsl_programs/ps6-codegen2/sieve.vsl
T
2026-04-28 15:27:55 +02:00

56 lines
1.1 KiB
Plaintext

var notPrime[500]
func main(max) {
println("Now printing every prime between 2 and ", max, ":")
if (max > 499) {
println("Sorry, this program can only print primes up to 499")
return 0
}
// Special cases for 0 and 1
notPrime[0] = 1
notPrime[1] = 1
var i = 2
while (i < max/2+1) {
// Only do sieve if i is a prime
if (!notPrime[i])
doSieve(i, max)
i = i + 1
}
printPrimes(max)
}
// Marks every multiple of factor, from 2*factor and above, as not being prime
func doSieve(factor, max) {
var counter = factor*2
while (counter < max + 1) {
notPrime[counter] = 1
counter = counter + factor
}
}
func printPrimes(max) {
var i = 0
while (1) {
if (!notPrime[i])
print(" ", i)
if (i == max)
break
else
i = i + 1
}
println("")
}
//TESTCASE: 600
//Now printing every prime between 2 and 600:
//Sorry, this program can only print primes up to 499
//TESTCASE: 100
//Now printing every prime between 2 and 100:
// 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97