Honaker Prime Number is a prime number P such that the sum of digits of P and sum of digits of index of P is a Prime Number.
Few Honaker Prime Numbers are:
131, 263, 457, 1039, 1049, 1091, 1301, 1361, 1433, 1571, 1913, 1933, 2141, 2221,…
Check if N is a Honaker Prime Number
Given an integer N, the task is to check if N is a Honaker Prime Number or not. If N is an Honaker Prime Number then print “Yes” else print “No”.
Examples:
Input: N = 131
Output: Yes
Explanation:
Sum of digits of 131 = 1 + 3 + 1 = 5
Sum of digits of 32 = 3 + 2 = 5Input: N = 161
Output: No
Approach: The idea is to find the index of the given number and check if sum of digits of index and N is the same or not. If it is same then, N is an Honaker Prime Number and print “Yes” else print “No”.
C++
// C++ program for the above approach #include <bits/stdc++.h> #define limit 10000000 using namespace std; int position[limit + 1]; // Function to precompute the position // of every prime number using Sieve void sieve() { // 0 and 1 are not prime numbers position[0] = -1, position[1] = -1; // Variable to store the position int pos = 0; for ( int i = 2; i <= limit; i++) { if (position[i] == 0) { // Incrementing the position for // every prime number position[i] = ++pos; for ( int j = i * 2; j <= limit; j += i) position[j] = -1; } } } // Function to get sum of digits int getSum( int n) { int sum = 0; while (n != 0) { sum = sum + n % 10; n = n / 10; } return sum; } // Function to check whether the given number // is Honaker Prime number or not bool isHonakerPrime( int n) { int pos = position[n]; if (pos == -1) return false ; return getSum(n) == getSum(pos); } // Driver Code int main() { // Precompute the prime numbers till 10^6 sieve(); // Given Number int N = 121; // Function Call if (isHonakerPrime(N)) cout << "Yes" ; else cout << "No" ; } |
Java
// Java program for above approach class GFG{ static final int limit = 10000000 ; static int []position = new int [limit + 1 ]; // Function to precompute the position // of every prime number using Sieve static void sieve() { // 0 and 1 are not prime numbers position[ 0 ] = - 1 ; position[ 1 ] = - 1 ; // Variable to store the position int pos = 0 ; for ( int i = 2 ; i <= limit; i++) { if (position[i] == 0 ) { // Incrementing the position for // every prime number position[i] = ++pos; for ( int j = i * 2 ; j <= limit; j += i) position[j] = - 1 ; } } } // Function to get sum of digits static int getSum( int n) { int sum = 0 ; while (n != 0 ) { sum = sum + n % 10 ; n = n / 10 ; } return sum; } // Function to check whether the given number // is Honaker Prime number or not static boolean isHonakerPrime( int n) { int pos = position[n]; if (pos == - 1 ) return false ; return getSum(n) == getSum(pos); } // Driver code public static void main(String[] args) { // Precompute the prime numbers till 10^6 sieve(); // Given Number int N = 121 ; // Function Call if (isHonakerPrime(N)) System.out.print( "Yes\n" ); else System.out.print( "No\n" ); } } // This code is contributed by shubham |
Python3
# Python3 program for the above approach limit = 10000000 position = [ 0 ] * (limit + 1 ) # Function to precompute the position # of every prime number using Sieve def sieve(): # 0 and 1 are not prime numbers position[ 0 ] = - 1 position[ 1 ] = - 1 # Variable to store the position pos = 0 for i in range ( 2 , limit + 1 ): if (position[i] = = 0 ): # Incrementing the position for # every prime number pos + = 1 position[i] = pos for j in range (i * 2 , limit + 1 , i): position[j] = - 1 # Function to get sum of digits def getSum(n): Sum = 0 while (n ! = 0 ): Sum = Sum + n % 10 n = n / / 10 return Sum # Function to check whether the given # number is Honaker Prime number or not def isHonakerPrime(n): pos = position[n] if (pos = = - 1 ): return False return bool (getSum(n) = = getSum(pos)) # Driver code # Precompute the prime numbers till 10^6 sieve() # Given Number N = 121 # Function Call if (isHonakerPrime(N)): print ( "Yes" ) else : print ( "No" ) # This code is contributed by divyeshrabadiya07 |
C#
// C# program for above approach using System; class GFG{ static readonly int limit = 10000000; static int []position = new int [limit + 1]; // Function to precompute the position // of every prime number using Sieve static void sieve() { // 0 and 1 are not prime numbers position[0] = -1; position[1] = -1; // Variable to store the position int pos = 0; for ( int i = 2; i <= limit; i++) { if (position[i] == 0) { // Incrementing the position for // every prime number position[i] = ++pos; for ( int j = i * 2; j <= limit; j += i) position[j] = -1; } } } // Function to get sum of digits static int getSum( int n) { int sum = 0; while (n != 0) { sum = sum + n % 10; n = n / 10; } return sum; } // Function to check whether the given number // is Honaker Prime number or not static bool isHonakerPrime( int n) { int pos = position[n]; if (pos == -1) return false ; return getSum(n) == getSum(pos); } // Driver code public static void Main(String[] args) { // Precompute the prime numbers till 10^6 sieve(); // Given Number int N = 121; // Function Call if (isHonakerPrime(N)) Console.Write( "Yes\n" ); else Console.Write( "No\n" ); } } // This code is contributed by 29AjayKumar |
Javascript
<script> // Javascript program for above approach const limit = 10000000; let position = Array(limit + 1).fill(0); // Function to precompute the position // of every prime number using Sieve function sieve() { // 0 and 1 are not prime numbers position[0] = -1; position[1] = -1; // Variable to store the position let pos = 0; for (let i = 2; i <= limit; i++) { if (position[i] == 0) { // Incrementing the position for // every prime number position[i] = ++pos; for (let j = i * 2; j <= limit; j += i) position[j] = -1; } } } // Function to get sum of digits function getSum( n) { let sum = 0; while (n != 0) { sum = sum + n % 10; n = parseInt(n / 10); } return sum; } // Function to check whether the given number // is Honaker Prime number or not function isHonakerPrime( n) { let pos = position[n]; if (pos == -1) return false ; return getSum(n) == getSum(pos); } // Driver code // Precompute the prime numbers till 10^6 sieve(); // Given Number let N = 121; // Function Call if (isHonakerPrime(N)) document.write( "Yes\n" ); else document.write( "No\n" ); // This code is contributed by aashish1995 </script> |
No
Reference: https://oeis.org/A033548
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!