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
Below is the implementation of Lemoine’s Conjecture:
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 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 |
Java
// 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 |
Python3
# 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 |
C#
// C# code to verify Lemoine's Conjecture // for any odd number >= 7 using 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 |
Javascript
<script> // JavaScript code to verify Lemoine's Conjecture // for any odd number >= 7 // Function to check if a number is // prime or not function isPrime(n) { if (n < 2) return false ; for (let 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 function lemoine(n) { // Declaring a map to hold pairs (p, q) let pr = new Map(); // Finding various values of p for each q // to satisfy n = p + (2 * q) for (let q = 1; q <= Math.floor(n / 2); q++) { let 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 if (!pr.has(p)){ pr.set(p, q); } } // Displaying all pairs (p, q) that satisfy // lemoine's conjecture for the number 'n' for (const [key, value] of pr) console.log(n, "=" , key, " + (2 *" , value, ")" ); } // Driver Function let n = 39; console.log(n, "can be expressed as " ); // Function calling lemoine(n); // This code is contributed by Gautam goel (gautamgoel962) </script> |
Output :
39 can be expressed as : 39 = 5 + (2 * 17) 39 = 13 + (2 * 13) 39 = 17 + (2 * 11) 39 = 29 + (2 * 5)
Time Complexity: O(n*(sqrt(n)+log(n)))
Auxiliary Space: O(n)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!