finding prime numbers from 1 to n using eratosthenes sieve
parent
9f095a1fbe
commit
06a2cc352e
@ -0,0 +1,25 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
// PrimesUpTo finds all prime numbers from 1 to upperBound
|
||||||
|
// It's implemented using eratosthenes sieve
|
||||||
|
// Works in O(upperBound) time and space
|
||||||
|
func PrimesUpTo(upperBound int) []int {
|
||||||
|
// lp array stores minimal prime divisor for every number from 2 to upperBound
|
||||||
|
var lp []int
|
||||||
|
lp = make([]int, upperBound+1)
|
||||||
|
|
||||||
|
// primes array stores primes
|
||||||
|
var primes []int
|
||||||
|
|
||||||
|
for i := 2; i <= upperBound; i++ {
|
||||||
|
if lp[i] == 0 {
|
||||||
|
lp[i] = i
|
||||||
|
primes = append(primes, i)
|
||||||
|
}
|
||||||
|
for j := 0; j < len(primes) && primes[j] <= lp[i] && i*primes[j] <= upperBound; j++ {
|
||||||
|
lp[i*primes[j]] = primes[j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return primes
|
||||||
|
}
|
Loading…
Reference in New Issue