Lemoine’s Conjecture
Lemoine’s Conjecture says any odd integer greater than 5 can be represented as the sum of an odd prime number and an even semiprime. Another statement which is suitable for programming is that 2n + 1 = p + 2q always has a solution in primes p and q (not necessarily distinct) for n > 2. We will write a Go program to find p and q for given odd number greater than 5.
package lemoine
import (
"fmt"
)
func IsPrime(n int) bool {
if n < 2 {
return false
}
for i := 2; i*i <= n; i++ {
if n%i == 0 {
return false
}
}
return true
}
func Lemoine(n int) {
if n <= 5 || n%2 == 0 {
panic("n must be greater than 5 and must be odd")
}
m := make(map[int]int)
for q := 1; q <= n/2; q++ {
p := n - 2*q
if IsPrime(p) && IsPrime(q) {
m[p] = q
}
}
for p, q := range m {
fmt.Println(n, "=", p, "+ ( 2 *", q, ")")
}
}
Example:
package lemoine
import (
"testing"
)
func TestIsPrime(t *testing.T) {
if IsPrime(97) != true {
t.Error("97 fail")
}
if IsPrime(98) != false {
t.Error("98 fail")
}
}
func TestLemoine(t *testing.T) {
Lemoine(39)
Lemoine(7)
Lemoine(101)
}
Tested on:
- Ubuntu Linux 17.10, Go 1.10.1
- Go Playground
References:
[1] | Lemoine's Conjecture - GeeksforGeeks |
[2] | [Golang] Sieve of Eratosthenes |