Lemoine's Conjecture - GeeksforGeeks

21 Dec, 2020
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++
Java
Python3
C#
// 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 notbool 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 conjecturevoid 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 Functionint main(){    int n = 39;    cout << n << " can be expressed as " << endl;         // Function calling    lemoine(n);         return 0;} // This code is contributed by Saagnik Adhikary
// Java code to verify Lemoine's Conjecture// for any odd number >= 7 import java.util.*; class GFG {    static class pair {        int first, second;         public pair(int first, int second) {            this.first = first;            this.second = second;        }    }     // Function to check if a number is    // prime or not    static boolean isPrime(int n) {        if (n < 2)            return false;         for (int i = 2; i <= Math.sqrt(n); i++) {            if (n % i == 0)                return false;        }        return true;    }     // Representing n as p + (2 * q) to satisfy    // lemoine's conjecture    static void lemoine(int n) {        // Declaring a map to hold pairs (p, q)        HashMap<Integer, pair> pr = new HashMap<>();         // Declaring an iterator for map        // HashMap<Integer,Integer>::iterator it;        // it = pr.begin();        int i = 0;        // 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.put(i, new pair(p, q));            i++;        }         // Displaying all pairs (p, q) that satisfy        // lemoine's conjecture for the number 'n'        for (Map.Entry<Integer, pair> it : pr.entrySet())            System.out.print(n + " = " + it.getValue().first + " + (2 * " + it.getValue().second + ")\n");    }     // Driver Function    public static void main(String[] args) {        int n = 39;        System.out.print(n + " can be expressed as " + "\n");         // Function calling        lemoine(n);     }} // This code contributed by aashish1995
# Python code to verify Lemoine's Conjecture# for any odd number >= 7from math import sqrt # Function to check if a number is# prime or notdef 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 conjecturedef 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 Codeif __name__ == "__main__":    n = 39    print(n, "can be expressed as ")     # Function calling    lemoine(n) # This code is contributed by# sanjeev2552
// C# code to verify Lemoine's Conjecture// for any odd number >= 7using System;using System.Collections.Generic; class GFG{    public   class pair   {         public           int first, second;           public pair(int first, int second)          {              this.first = first;              this.second = second;          }      }       // Function to check if a number is      // prime or not      static bool isPrime(int n)      {          if (n < 2)              return false;           for (int i = 2; i <= Math.Sqrt(n); i++)          {              if (n % i == 0)                  return false;          }          return true;      }       // Representing n as p + (2 * q) to satisfy      // lemoine's conjecture      static void lemoine(int n)      {           // Declaring a map to hold pairs (p, q)          Dictionary<int, pair> pr = new Dictionary<int, pair>();           // Declaring an iterator for map          // Dictionary<int,int>::iterator it;          // it = pr.begin();          int i = 0;           // 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.Add(i, new pair(p, q));              i++;          }           // Displaying all pairs (p, q) that satisfy          // lemoine's conjecture for the number 'n'          foreach (KeyValuePair<int, pair> it in pr)              Console.Write(n + " = " + it.Value.first +                            " + (2 * " + it.Value.second + ")\n");      }       // Driver code      public static void Main(String[] args)      {          int n = 39;          Console.Write(n + " can be expressed as " + "\n");           // Function calling          lemoine(n);      }  }   // This code is contributed by aashish1995
Output :  
39 can be expressed as :
39 = 5 + (2 * 17)
39 = 13 + (2 * 13)
39 = 17 + (2 * 11)
39 = 29 + (2 * 5)
 
 
 
SaagnikAdhikary
sanjeev2552
aashish1995
number-theory
Prime Number
prime-factor
Mathematical
number-theory
Mathematical
Prime Number
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Program for Decimal to Binary Conversion
Find all factors of a natural number | Set 1
Modulo 10^9+7 (1000000007)
Program to find sum of elements in a given array
The Knight's tour problem | Backtracking-1
Program for factorial of a number
Minimum number of jumps to reach end
Operators in C / C++