En la teoría de los números, un primo equilibrado es un número primo con huecos primos del mismo tamaño por encima y por debajo, de modo que es igual a la media aritmética de los primos más cercanos por encima y por debajo. O para decirlo algebraicamente, dado un número primo p n , donde n es su índice en el conjunto ordenado de números primos, los
primeros primos balanceados son 5, 53, 157, 173……
Dado un entero positivo N . La tarea es imprimir el N-ésimo número primo balanceado.
Ejemplos:
Input : n = 2 Output : 53 Input : n = 3 Output : 157
La idea es generar números primos usando Sieve of Eratosthenes y almacenarlos en una array. Ahora itere sobre la array para verificar si es prima balanceada o no y siga contando la prima balanceada. Una vez que alcances el n-ésimo primo, devuélvelo.
A continuación se muestra la implementación de este enfoque:
C++
// CPP Program to find Nth Balanced Prime #include<bits/stdc++.h> #define MAX 501 using namespace std; // Return the Nth balanced prime. int balancedprime(int n) { // Sieve of Eratosthenes bool prime[MAX+1]; memset(prime, true, sizeof(prime)); for (int p = 2; p*p <= MAX; p++) { // If prime[p] is not changed, then it is a prime if (prime[p] == true) { // Update all multiples of p for (int i = p*2; i <= MAX; i += p) prime[i] = false; } } // storing all primes vector<int> v; for (int p = 3; p <= MAX; p += 2) if (prime[p]) v.push_back(p); int count = 0; // Finding the Nth balanced Prime for (int i = 1; i < v.size(); i++) { if (v[i] == (v[i+1] + v[i - 1])/2) count++; if (count == n) return v[i]; } } // Driven Program int main() { int n = 4; cout << balancedprime(n) << endl; return 0; }
Java
// Java Program to find Nth Balanced Prime import java.util.*; public class GFG { static int MAX = 501; // Return the Nth balanced prime. public static int balancedprime(int n) { // Sieve of Eratosthenes boolean[] prime = new boolean[MAX+1]; for(int k = 0 ; k < MAX+1; k++) prime[k] = true; for (int p = 2; p*p <= MAX; p++) { // If prime[p] is not changed, // then it is a prime if (prime[p] == true) { // Update all multiples of p for (int i = p*2; i <= MAX; i += p) prime[i] = false; } } // storing all primes Vector<Integer> v = new Vector<Integer>(); for (int p = 3; p <= MAX; p += 2) if (prime[p]) v.add(p); int count = 0; // Finding the Nth balanced Prime for (int i = 1; i < v.size(); i++) { if ((int)v.get(i) == ((int)v.get(i+1) + (int)v.get(i-1))/2) count++; if (count == n) return (int) v.get(i); } return 1; } // Driven Program public static void main(String[] args) { int n = 4; System.out.print(balancedprime(n)); } } // This code is contributed by Prasad Kshirsagar
Python3
# Python3 code to find Nth Balanced Prime MAX = 501 # Return the Nth balanced prime. def balancedprime( n ): # Sieve of Eratosthenes prime = [True]*(MAX+1) p=2 while p * p <= MAX: # If prime[p] is not changed, # then it is a prime if prime[p] == True: # Update all multiples of p i = p * 2 while i <= MAX: prime[i] = False i = i + p p = p +1 # storing all primes v = list() p = 3 while p <= MAX: if prime[p]: v.append(p) p = p + 2 count = 0 # Finding the Nth balanced Prime i=1 for i in range(len(v)): if v[i] == (v[i+1] + v[i - 1])/2: count += 1 if count == n: return v[i] # Driven Program n = 4 print(balancedprime(n)) # This code is contributed by "Sharad_Bhardwaj".
PHP
<?php // PHP Program to find Nth Balanced Prime $MAX=501; // Return the Nth balanced prime. function balancedprime($n) { global $MAX; // Sieve of Eratosthenes $prime=array_fill(0,$MAX+1,true); for ($p = 2; $p*$p <= $MAX; $p++) { // If prime[p] is not changed, then it is a prime if ($prime[$p] == true) { // Update all multiples of p for ($i = $p*2; $i <= $MAX; $i += $p) $prime[$i] = false; } } // storing all primes $v=array(); for ($p = 3; $p <= $MAX; $p += 2) if ($prime[$p]) array_push($v,$p); $count = 0; // Finding the Nth balanced Prime for ($i = 1; $i < count($v); $i++) { if ($v[$i] == ($v[$i+1] + $v[$i - 1])/2) $count++; if ($count == $n) return $v[$i]; } } // Driven Program $n = 4; echo balancedprime($n); // this code is contributed by mits. ?>
C#
// C# Program to find Nth Balanced Prime using System; using System.Collections.Generic; public class GFG { static int MAX = 501; // Return the Nth balanced prime. public static int balancedprime(int n) { // Sieve of Eratosthenes bool[] prime = new bool[MAX+1]; for(int k = 0 ; k < MAX+1; k++) prime[k] = true; for (int p = 2; p*p <= MAX; p++) { // If prime[p] is not changed, // then it is a prime if (prime[p] == true) { // Update all multiples of p for (int i = p*2; i <= MAX; i += p) prime[i] = false; } } // storing all primes List<int> v = new List<int>(); for (int p = 3; p <= MAX; p += 2) if (prime[p]) v.Add(p); int c = 0; // Finding the Nth balanced Prime for (int i = 1; i < v.Count-1; i++) { if ((int)v[i]==(int)(v[i+1]+v[i-1])/2) c++; if (c == n) return (int) v[i]; } return 1; } // Driven Program public static void Main() { int n = 4; Console.WriteLine(balancedprime(n)); } } // This code is contributed by mits
Javascript
<script> // Javascript Program to find Nth Balanced Prime var MAX = 501; // Return the Nth balanced prime. function balancedprime(n) { // Sieve of Eratosthenes var prime = Array(MAX+1).fill(true); for (var p = 2; p*p <= MAX; p++) { // If prime[p] is not changed, then it is a prime if (prime[p] == true) { // Update all multiples of p for (var i = p*2; i <= MAX; i += p) prime[i] = false; } } // storing all primes var v = []; for (var p = 3; p <= MAX; p += 2) if (prime[p]) v.push(p); var count = 0; // Finding the Nth balanced Prime for (var i = 1; i < v.length; i++) { if (v[i] == (v[i+1] + v[i - 1])/2) count++; if (count == n) return v[i]; } } // Driven Program var n = 4; document.write( balancedprime(n) ); </script>
Producción:
173