github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/math/pi.go (about) 1 package math 2 3 // Pi returns # of primes LTE than n 4 func Pi(n int) int { 5 if n <= 1 { 6 return 0 7 } 8 9 // store numbers in range [2,n] 10 numbers := make([]int, n-1) 11 for i := range numbers { 12 numbers[i] = i + 2 13 } 14 15 count := 0 16 // sieve method 17 for i, v := range numbers { 18 if v == i+2 { 19 count++ 20 // v is a prime 21 for j := i + v; j <= n-2; j += v { 22 numbers[j] = 0 23 } 24 } 25 } 26 27 return count 28 29 } 30 31 // R2 returns # of ordered prime pairs with sum n 32 func R2(n int) int { 33 if n <= 1 { 34 return 0 35 } 36 37 // store numbers in range [2,n] 38 numbers := make([]int, n-1) 39 for i := range numbers { 40 numbers[i] = i + 2 41 } 42 43 // sieve method 44 for i, v := range numbers { 45 if v == i+2 { 46 // v is a prime 47 for j := i + v; j <= n-2; j += v { 48 numbers[j] = 0 49 } 50 } 51 } 52 53 count := 0 54 for i, v := range numbers { 55 if v == i+2 { 56 // v is a prime 57 j := n - v - 2 58 if j >= 0 && numbers[j] > 0 { 59 count++ 60 numbers[j] = 0 61 } 62 } 63 } 64 return count 65 }