Contar números primos en el rango [L, R] cuya suma de un solo dígito también es primo

Dados dos enteros L y R . La tarea es contar los números primos en el rango [L, R] , cuya suma única también es un número primo. 
Una sola suma se obtiene sumando los dígitos de un número hasta que quede un solo dígito.

Ejemplos

Entrada: L = 5, R = 20 
Salida: 3
Explicación: Los números primos en el rango L = 5 a R = 20 son {5, 7, 11, 13, 17, 19}
Su «suma única» de dígitos es {5 , 7, 2, 4, 8, 1}.  
Solo {5, 7, 2} son primos. Por lo tanto la respuesta es 3.

Entrada: L = 1, R = 10  
Salida: 4
Explicación: Los números primos en el rango L = 1 a R = 10 son {2, 3, 5, 7}.  
Su «suma única» de dígitos es {2, 3, 5, 7}.  
Como todos los números son primos, la respuesta es 4.

 

Enfoque:   el enfoque ingenuo es iterar para cada número en el rango [L, R] y verificar si el número es primo o no. Si el número es primo, encuentre la suma única de sus dígitos y verifique nuevamente si la suma única es prima o no. Si la suma única es prima, incremente el contador e imprima el elemento actual en el rango [L, R] .

A continuación se muestra la implementación del enfoque anterior.

C++14

// C++ program for above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to check whether number
// is prime or not
bool isPrime(int n)
{
    // Corner case
    if (n <= 1)
        return false;
 
    // Check from 2 to square root of n
    for (int i = 2; i <= sqrt(n); i++)
        if (n % i == 0)
            return false;
 
    return true;
}
 
// Function to find single digit sum
int SingleDigitSum(int& n)
{
    if (n <= 9)
        return n;
    return (n % 9 == 0) ? 9 : n % 9;
}
 
// Function to find single digit primes
int countSingleDigitPrimes(int l, int r)
{
    int count = 0, i;
 
    for (i = l; i <= r; i++) {
        if (isPrime(i)
            && isPrime(SingleDigitSum(i))) {
            count++;
        }
    }
    return count;
}
 
// Driver Code
int main()
{
    // Input range
    int L = 1, R = 10;
 
    // Function Call
    cout << countSingleDigitPrimes(L, R);
 
    return 0;
}

Java

// Java program to implement
// the above approach
class GFG
{
 
  // Function to check whether number
  // is prime or not
  static boolean isPrime(int n)
  {
 
    // Corner case
    if (n <= 1)
      return false;
 
    // Check from 2 to square root of n
    for (int i = 2; i <= Math.sqrt(n); i++)
      if (n % i == 0)
        return false;
 
    return true;
  }
 
  // Function to find single digit sum
  static int SingleDigitSum(int n)
  {
    if (n <= 9)
      return n;
    return (n % 9 == 0) ? 9 : n % 9;
  }
 
  // Function to find single digit primes
  static int countSingleDigitPrimes(int l, int r)
  {
    int count = 0, i;
 
    for (i = l; i <= r; i++) {
      if (isPrime(i)
          && isPrime(SingleDigitSum(i))) {
        count++;
      }
    }
    return count;
  }
 
  // Driver Code
  public static void main(String args[])
  {
 
    // Input range
    int L = 1, R = 10;
 
    // Function Call
    System.out.println(countSingleDigitPrimes(L, R));
 
  }
}
 
// This code is contributed by gfgking

Python3

# Python program for above approach
import math
 
# Function to check whether number
# is prime or not
def isPrime(n):
   
    # Corner case
    if n <= 1:
        return False
 
    # Check from 2 to square root of n
    for i in range(2, math.floor(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
 
    return True
 
# Function to find single digit sum
def SingleDigitSum(n):
    if n <= 9:
        return n
    return 9 if (n % 9 == 0) else n % 9
 
# Function to find single digit primes
def countSingleDigitPrimes(l, r):
    count = 0
    i = None
 
    for i in range(l, r + 1):
        if isPrime(i) and isPrime(SingleDigitSum(i)):
            count += 1
    return count
 
# Driver Code
 
# Input range
L = 1
R = 10
 
# Function Call
print(countSingleDigitPrimes(L, R))
 
# This code is contributed by gfgking

C#

// C# program to implement
// the above approach
using System;
class GFG
{
 
  // Function to check whether number
  // is prime or not
  static bool isPrime(int n)
  {
 
    // Corner case
    if (n <= 1)
      return false;
 
    // Check from 2 to square root of n
    for (int i = 2; i <= Math.Sqrt(n); i++)
      if (n % i == 0)
        return false;
 
    return true;
  }
 
  // Function to find single digit sum
  static int SingleDigitSum(int n)
  {
    if (n <= 9)
      return n;
    return (n % 9 == 0) ? 9 : n % 9;
  }
 
  // Function to find single digit primes
  static int countSingleDigitPrimes(int l, int r)
  {
    int count = 0, i;
 
    for (i = l; i <= r; i++) {
      if (isPrime(i)
          && isPrime(SingleDigitSum(i))) {
        count++;
      }
    }
    return count;
  }
 
  // Driver Code
  public static void Main()
  {
 
    // Input range
    int L = 1, R = 10;
 
    // Function Call
    Console.Write(countSingleDigitPrimes(L, R));
 
  }
}
 
// This code is contributed by Samim Hossain Mondal.

Javascript

<script>
    // JavaScript program for above approach
 
    // Function to check whether number
    // is prime or not
    const isPrime = (n) => {
        // Corner case
        if (n <= 1)
            return false;
 
        // Check from 2 to square root of n
        for (let i = 2; i <= Math.sqrt(n); i++)
            if (n % i == 0)
                return false;
 
        return true;
    }
 
    // Function to find single digit sum
    const SingleDigitSum = (n) => {
        if (n <= 9)
            return n;
        return (n % 9 == 0) ? 9 : n % 9;
    }
 
    // Function to find single digit primes
    const countSingleDigitPrimes = (l, r) => {
        let count = 0, i;
 
        for (i = l; i <= r; i++) {
            if (isPrime(i)
                && isPrime(SingleDigitSum(i))) {
                count++;
            }
        }
        return count;
    }
 
    // Driver Code
 
    // Input range
    let L = 1, R = 10;
 
    // Function Call
    document.write(countSingleDigitPrimes(L, R));
 
// This code is contributed by rakeshsahni
 
</script>
Producción

4

 
Complejidad de tiempo: O((R – L)*N^(1/2)) donde N es el número primo en el rango [L, R]. 
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por prophet1999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *