El número primo de Honaker es un número primo P tal que la suma de los dígitos de P y la suma de los dígitos del índice de P es un número primo .
Pocos números primos de Honaker son:
131, 263, 457, 1039, 1049, 1091, 1301, 1361, 1433, 1571, 1913, 1933, 2141, 2221,…
Comprobar si N es un número primo de Honaker
Dado un número entero N , la tarea es comprobar si N es un número primo de Honaker o no. Si N es un número primo de Honaker, escriba «Sí» , de lo contrario, escriba «No» .
Ejemplos:
Entrada: N = 131
Salida: Sí
Explicación:
Suma de dígitos de 131 = 1 + 3 + 1 = 5
Suma de dígitos de 32 = 3 + 2 = 5Entrada: N = 161
Salida: No
Enfoque: La idea es encontrar el índice del número dado y verificar si la suma de los dígitos del índice y N es la misma o no. Si es lo mismo, N es un número primo de Honaker e imprime «Sí» , de lo contrario, imprime «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
Referencia: https://oeis.org/A033548