package main
// The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
// Find the sum of all the primes below two million.
import (
"fmt"
"time"
)
func getRange(min, max int) (nums []int) {
size := max - min
nums = make([]int, size)
for i := 0; i < size; i++ {
nums[i] = i + min
}
return
}
func nextP(nums []int, p int) int {
newIx := (p - 2) + 1
for ; nums[newIx] == 0 && newIx < len(nums); newIx++ {
}
return nums[newIx]
}
func ithN(nums []int, targetIx int) int {
for numsFound, vecIx := 0, 0; vecIx < len(nums); vecIx++ {
if nums[vecIx] != 0 {
if numsFound == targetIx {
return nums[vecIx]
}
numsFound++
}
}
return 0
}
func sieveTo(max int) (primes []int) {
primes = getRange(2, max)
for i, p := 0, 2; p * p < max; i++ {
for multIx := (p * p) - 2; multIx + 2 < max; multIx += p {
primes[multIx] = 0
}
p = ithN(primes, i + 1)
}
return
}
func sum(n []int) (sum uint64) {
for i := 0; i < len(n); i++ {
sum += uint64(n[i])
}
return
}
func main() {
fmt.Println(sum(sieveTo(200000)))
bench
:= time.
Now().
Sub(start
) fmt.Println(bench)
}
cGFja2FnZSBtYWluCgovLyBUaGUgc3VtIG9mIHRoZSBwcmltZXMgYmVsb3cgMTAgaXMgMiArIDMgKyA1ICsgNyA9IDE3LgovLyBGaW5kIHRoZSBzdW0gb2YgYWxsIHRoZSBwcmltZXMgYmVsb3cgdHdvIG1pbGxpb24uCgppbXBvcnQgKAoJImZtdCIKCSJ0aW1lIgopCgpmdW5jIGdldFJhbmdlKG1pbiwgbWF4IGludCkgKG51bXMgW11pbnQpIHsKCXNpemUgOj0gbWF4IC0gbWluCgludW1zID0gbWFrZShbXWludCwgc2l6ZSkKCWZvciBpIDo9IDA7IGkgPCBzaXplOyBpKysgewoJCW51bXNbaV0gPSBpICsgbWluCgl9CglyZXR1cm4KfQoKZnVuYyBuZXh0UChudW1zIFtdaW50LCBwIGludCkgaW50IHsKCW5ld0l4IDo9IChwIC0gMikgKyAxCglmb3IgOyBudW1zW25ld0l4XSA9PSAwICYmIG5ld0l4IDwgbGVuKG51bXMpOyBuZXdJeCsrIHsKCX0KCXJldHVybiBudW1zW25ld0l4XQp9CgpmdW5jIGl0aE4obnVtcyBbXWludCwgdGFyZ2V0SXggaW50KSBpbnQgewoJZm9yIG51bXNGb3VuZCwgdmVjSXggOj0gMCwgMDsgdmVjSXggPCBsZW4obnVtcyk7IHZlY0l4KysgewoJCWlmIG51bXNbdmVjSXhdICE9IDAgewoJCQlpZiBudW1zRm91bmQgPT0gdGFyZ2V0SXggewoJCQkJcmV0dXJuIG51bXNbdmVjSXhdCgkJCX0KCQkJbnVtc0ZvdW5kKysKCQl9Cgl9CglyZXR1cm4gMAp9CgpmdW5jIHNpZXZlVG8obWF4IGludCkgKHByaW1lcyBbXWludCkgewoJcHJpbWVzID0gZ2V0UmFuZ2UoMiwgbWF4KQoJZm9yIGksIHAgOj0gMCwgMjsgcCAqIHAgPCBtYXg7IGkrKyB7CgkJZm9yIG11bHRJeCA6PSAocCAqIHApIC0gMjsgbXVsdEl4ICsgMiA8IG1heDsgbXVsdEl4ICs9IHAgewoJCQlwcmltZXNbbXVsdEl4XSA9IDAKCQl9CgkJcCA9IGl0aE4ocHJpbWVzLCBpICsgMSkKCX0KCXJldHVybgp9CgpmdW5jIHN1bShuIFtdaW50KSAoc3VtIHVpbnQ2NCkgewoJZm9yIGkgOj0gMDsgaSA8IGxlbihuKTsgaSsrIHsKCQlzdW0gKz0gdWludDY0KG5baV0pCgl9CglyZXR1cm4KfQoKZnVuYyBtYWluKCkgewoJc3RhcnQgOj0gdGltZS5Ob3coKQoJZm10LlByaW50bG4oc3VtKHNpZXZlVG8oMjAwMDAwKSkpCgliZW5jaCA6PSB0aW1lLk5vdygpLlN1YihzdGFydCkKCWZtdC5QcmludGxuKGJlbmNoKQp9