Lemoine’s Conjecture

Any odd integer greater than 5 can be expressed as a sum of an odd prime (all primes other than 2 are odd) and an even semiprime. A semiprime number is a product of two prime numbers. This is called Lemoine’s conjecture.
Examples :

7 = 3 + (2 × 2),
where 3 is a prime number (other than 2) and 4 (= 2 × 2) is a semiprime number.

11 = 5 + (2 × 3)
where 5 is a prime number and 6(= 2 × 3) is a semiprime number.



9 = 3 + (2 × 3) or 9 = 5 + (2 × 2)

47 = 13 + 2 × 17 = 37 + 2 × 5 = 41 + 2 × 3 = 43 + 2 × 2

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ code to verify Lemoine's Conjecture
// for any odd number >= 7
#include<bits/stdc++.h>
using namespace std;
  
// Function to check if a number is
// prime or not
bool isPrime(int n)
{
    if (n < 2)
        return false;
          
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0)
            return false;
    }
    return true;
}
  
// Representing n as p + (2 * q) to satisfy
// lemoine's conjecture
void lemoine(int n)
{
    // Declaring a map to hold pairs (p, q)
    map<int, int> pr;
      
    // Declaring an iterator for map
    map<int, int>::iterator it;
    it = pr.begin();
      
    // Finding various values of p for each q
    // to satisfy n = p + (2 * q)
    for (int q = 1; q <= n / 2; q++) 
    
        int p = n - 2 * q;
          
        // After finding a pair that satisfies the
        // equation, check if both p and q are
        // prime or not
        if (isPrime(p) && isPrime(q))
          
            // If both p and q are prime, store
            // them in the map
            pr.insert(it, pair<int, int>(p, q));
    }
      
    // Displaying all pairs (p, q) that satisfy
    // lemoine's conjecture for the number 'n'
    for (it = pr.begin(); it != pr.end(); ++it)
        cout << n << " = " << it->first
             << " + (2 * " << it->second << ")\n";
}
  
// Driver Function
int main()
{
    int n = 39;
    cout << n << " can be expressed as " << endl;
      
    // Function calling
    lemoine(n);
      
    return 0;
}
  
// This code is contributed by Saagnik Adhikary

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python code to verify Lemoine's Conjecture
# for any odd number >= 7
  
from math import sqrt
  
  
# Function to check if a number is
# prime or not
def isPrime(n: int) -> bool:
    if n < 2:
        return False
  
    for i in range(2, int(sqrt(n)) + 1):
        if n % i == 0:
            return False
  
    return True
  
  
# Representing n as p + (2 * q) to satisfy
# lemoine's conjecture
def lemoine(n: int) -> None:
  
    # Declaring a map to hold pairs (p, q)
    pr = dict()
  
    # Finding various values of p for each q
    # to satisfy n = p + (2 * q)
    for q in range(1, n // 2 + 1):
        p = n - 2 * q
  
        # After finding a pair that satisfies the
        # equation, check if both p and q are
        # prime or not
        if isPrime(p) and isPrime(q):
  
            # If both p and q are prime, store
            # them in the map
            if p not in pr:
                pr[p] = q
  
    # Displaying all pairs (p, q) that satisfy
    # lemoine's conjecture for the number 'n'
    for it in pr:
        print("%d = %d + (2 * %d)" % (n, it, pr[it]))
  
  
# Driver Code
if __name__ == "__main__":
    n = 39
    print(n, "can be expressed as ")
  
    # Function calling
    lemoine(n)
  
# This code is contributed by
# sanjeev2552

chevron_right


Output :

39 can be expressed as :
39 = 5 + (2 * 17)
39 = 13 + (2 * 13)
39 = 17 + (2 * 11)
39 = 29 + (2 * 5)


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.