Skip to content

Commit bb13e66

Browse files
committed
examples: use a sieve of Eratosthenes in primes.v, to handle bigger inputs more efficiently
1 parent 75417c5 commit bb13e66

1 file changed

Lines changed: 19 additions & 19 deletions

File tree

‎examples/primes.v‎

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
fn is_prime(n int) bool {
2-
if n <= 1 {
3-
return false
4-
}
5-
for i := 2; i * i <= n; i++ {
6-
if n % i == 0 {
7-
return false
1+
import math { log }
2+
3+
n := arguments()[1] or { '10' }.int()
4+
sz := if n < 15 {
5+
50
6+
} else {
7+
ln := log(f64(n))
8+
int(f64(n) * (ln + log(ln))) + 1
9+
}
10+
mut sieve := []bool{len: sz}
11+
for i := 2; i * i < sz; i++ {
12+
if !sieve[i] {
13+
for j := i * i; j < sz; j += i {
14+
sieve[j] = true
815
}
916
}
10-
return true
1117
}
12-
13-
fn main() {
14-
how_many := arguments()[1] or { '10' }.int()
15-
mut count := 0
16-
mut num := 2
17-
for count < how_many {
18-
if is_prime(num) {
19-
println(num)
20-
count++
21-
}
22-
num++
18+
mut c := 0
19+
for i := 2; c < n && i < sz; i++ {
20+
if !sieve[i] {
21+
println(i)
22+
c++
2323
}
2424
}

0 commit comments

Comments
 (0)