Construya la string Cypher en función de las condiciones dadas

Dado un número N , la tarea es convertir el número dado en una string Cypher sobre la base de las siguientes condiciones:  

  • Si N es un semiprimo , cambie cada dígito en los lugares pares de N a su correspondiente alfabeto coincidente como se muestra a continuación.
  • Si N se puede escribir como una suma de dos números primos , cambie cada dígito en los lugares impares de N a su alfabeto correspondiente como se muestra a continuación.
  • Si ambas condiciones satisfacen la concatenación, se forman las dos strings anteriores.
  • Si N no puede satisfacer los tres criterios anteriores, imprima «-1».

A continuación se muestra la lista de caracteres coincidentes:  

Ejemplos:  

Entrada: N = 61 
Salida: 6B 
Explicación: 
Dado que 61 se puede expresar como la suma de dos números primos: 61 = 2 + 59 
Por lo tanto, la string resultante después de cambiar el carácter en el índice par es «6B».
Entrada: N = 1011243 
Salida: B0B1C4D 
Explicación: 
Dado que 1011243 es un número semiprimo: 1011243 = 3 * 337081 
Por lo tanto, la string resultante después de cambiar el carácter en el índice par es «B0B1C4D». 

Acercarse:  

  • Verifique si el número N dado es semiprimo o no utilizando el enfoque discutido en este artículo. En caso afirmativo, haga lo siguiente: 
    • Convierta el número N dado en una string (por ejemplo, str ) usando la función to_string() .
    • Recorra la string anterior formada y cambie los caracteres en el índice par como:
str[i] = char((str[i] - '0') + 65)
  • Imprime la nueva string formada.
  • Verifique si el número N dado se puede expresar como una suma de dos números primos o no usando el enfoque discutido en este artículo. En caso afirmativo, haga lo siguiente: 
    • Convierta el número N dado en una string (por ejemplo, str ) usando la función to_string() .
    • Recorra la string anterior formada y cambie los caracteres en el índice impar como:
str[i] = char((str[i] - '0') + 65)
  • Imprime la nueva string formada.
  • Si las dos condiciones anteriores no se cumplen, entonces no podemos formar Cypher String. Imprima “-1” .

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

C++

// C++ program for the above approach
 
#include "bits/stdc++.h"
using namespace std;
 
// Function to check whether a number
// is prime or not
bool isPrime(int n)
{
    if (n <= 1)
        return false;
 
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0)
            return false;
    }
 
    return true;
}
 
// Function to check if a prime number
// can be expressed as sum of
// two Prime Numbers
bool isPossibleSum(int N)
{
    // If the N && (N-2) is Prime
    if (isPrime(N)
        && isPrime(N - 2)) {
        return true;
    }
    else {
        return false;
    }
}
 
// Function to check semiPrime
bool checkSemiprime(int num)
{
    int cnt = 0;
 
    // Loop from 2 to sqrt(num)
    for (int i = 2; cnt < 2
                    && i * i <= num;
         ++i) {
        while (num % i == 0) {
            num /= i,
 
                // Increment the count of
                // prime numbers
                ++cnt;
        }
    }
 
    // If num is greater than 1, then
    // add 1 to it
    if (num > 1) {
        ++cnt;
    }
 
    // Return '1' if count is 2 else
    // return '0'
    return cnt == 2;
}
 
// Function to make the Cypher string
void makeCypherString(int N)
{
 
    // Resultant string
    string semiPrime = "";
    string sumOfPrime = "";
 
    // Make string for the number N
    string str = to_string(N);
 
    // Check for semiPrime
    if (checkSemiprime(N)) {
 
        // Traverse to make Cypher string
        for (int i = 0; str[i]; i++) {
 
            // If index is odd add the
            // current character
            if (i & 1) {
                semiPrime += str[i];
            }
 
            // Else current character is
            // changed
            else {
                semiPrime
                    += char(
                        str[i] - '0' + 65);
            }
        }
    }
 
    // Check for sum of two primes
    if (isPossibleSum(N)) {
 
        // Traverse to make Cypher string
        for (int i = 0; str[i]; i++) {
 
            // If index is odd then
            // current character is
            // changed
            if (i & 1) {
                sumOfPrime
                    += char(
                        str[i] - '0' + 65);
            }
 
            // Else add the current
            // character
            else {
                sumOfPrime += str[i];
            }
        }
    }
 
    // If the resultant string is ""
    // then print -1
    if (semiPrime + sumOfPrime == "") {
        cout << "-1";
    }
 
    // Else print the resultant string
    else {
        cout << semiPrime + sumOfPrime;
    }
}
 
// Driver Code
int main()
{
 
    // Given Number
    int N = 1011243;
 
    // Function Call
    makeCypherString(N);
 
    return 0;
}

Java

// Java program for
// the above approach
import java.util.*;
class GFG{
 
// Function to check
// whether a number
// is prime or not
static boolean isPrime(int n)
{
  if (n <= 1)
    return false;
 
  for (int i = 2; i <= Math.sqrt(n); i++)
  {
    if (n % i == 0)
      return false;
  }
  return true;
}
 
// Function to check if a prime number
// can be expressed as sum of
// two Prime Numbers
static boolean isPossibleSum(int N)
{
  // If the N && (N-2) is Prime
  if (isPrime(N) && isPrime(N - 2))
  {
    return true;
  }
  else
  {
    return false;
  }
}
 
// Function to check semiPrime
static boolean checkSemiprime(int num)
{
  int cnt = 0;
 
  // Loop from 2 to Math.sqrt(num)
  for (int i = 2; cnt < 2 &&
           i * i <= num; ++i)
  {
    while (num % i == 0)
    {
      num /= i;
 
      // Increment the count of
      // prime numbers
      ++cnt;
    }
  }
 
  // If num is greater than 1, then
  // add 1 to it
  if (num > 1)
  {
    ++cnt;
  }
 
  // Return '1' if count is 2 else
  // return '0'
  return cnt == 2;
}
 
// Function to make the Cypher String
static void makeCypherString(int N)
{
  // Resultant String
  String semiPrime = "";
  String sumOfPrime = "";
 
  // Make String for the number N
  String str = String.valueOf(N);
 
  // Check for semiPrime
  if (checkSemiprime(N))
  {
    // Traverse to make Cypher String
    for (int i = 0; i < str.length(); i++)
    {
      // If index is odd add the
      // current character
      if (i % 2 == 1)
      {
        semiPrime += str.charAt(i);
      }
 
      // Else current character is
      // changed
      else
      {
        semiPrime += (char)(str.charAt(i) -
                            '0' + 65);
      }
    }
  }
 
  // Check for sum of two primes
  if (isPossibleSum(N))
  {
    // Traverse to make Cypher String
    for (int i = 0; i < str.length(); i++)
    {
      // If index is odd then
      // current character is
      // changed
      if (i % 2 == 1)
      {
        sumOfPrime += (char)(str.charAt(i) -
                             '0' + 65);
      }
 
      // Else add the current
      // character
      else
      {
        sumOfPrime += str.charAt(i);
      }
    }
  }
 
  // If the resultant String is ""
  // then print -1
  if (semiPrime + sumOfPrime == "")
  {
    System.out.print("-1");
  }
 
  // Else print the resultant String
  else
  {
    System.out.print(semiPrime +
                     sumOfPrime);
  }
}
 
// Driver Code
public static void main(String[] args)
{
  // Given Number
  int N = 1011243;
 
  // Function Call
  makeCypherString(N);
}
}
 
// This code is contributed by Rajput-Ji

Python3

# Python3 program for the above approach
import math
 
# Function to check whether a number
# is prime or not
def isPrime(n):
 
    if (n <= 1):
        return False
         
    sqt = (int)(math.sqrt(n))
    for i in range(2, sqt):
        if (n % i == 0):
            return False
 
    return True
 
# Function to check if a prime number
# can be expressed as sum of
# two Prime Numbers
def isPossibleSum(N):
 
    # If the N && (N-2) is Prime
    if (isPrime(N) and isPrime(N - 2)):
        return True
    else:
        return False
 
# Function to check semiPrime
def checkSemiprime(num):
 
    cnt = 0
 
    # Loop from 2 to sqrt(num)
    i = 2
    while cnt < 2 and i * i <= num:
        while (num % i == 0):
            num //= i
 
            # Increment the count of
            # prime numbers
            cnt += 1
             
        i += 1
 
    # If num is greater than 1, then
    # add 1 to it
    if (num > 1):
        cnt += 1
     
    # Return '1' if count is 2 else
    # return '0'
    return cnt == 2
 
# Function to make the Cypher string
def makeCypherString(N):
 
    # Resultant string
    semiPrime = ""
    sumOfPrime = ""
 
    # Make string for the number N
    st = str(N)
 
    # Check for semiPrime
    if (checkSemiprime(N)):
 
        # Traverse to make Cypher string
        for i in range(len(st)):
 
            # If index is odd add the
            # current character
            if (i & 1):
                semiPrime += st[i]
             
            # Else current character is
            # changed
            else:
                semiPrime += chr(ord(st[i]) -
                                 ord('0') + 65)
 
    # Check for sum of two primes
    if (isPossibleSum(N)):
 
        # Traverse to make Cypher string
        for i in range(len(st)):
 
            # If index is odd then
            # current character is
            # changed
            if (i & 1):
                sumOfPrime += chr(ord(st[i]) -
                                  ord('0') + 65)
 
            # Else add the current
            # character
            else:
                sumOfPrime += st[i]
 
    # If the resultant string is ""
    # then print -1
    if (semiPrime + sumOfPrime == ""):
        print("-1")
 
    # Else print the resultant string
    else:
        print(semiPrime + sumOfPrime)
 
# Driver Code
if __name__ == "__main__":
 
    # Given number
    N = 1011243
 
    # Function call
    makeCypherString(N)
 
# This code is contributed by chitranayal

C#

// C# program for
// the above approach
using System;
class GFG{
 
// Function to check
// whether a number
// is prime or not
static bool isPrime(int n)
{
  if (n <= 1)
    return false;
 
  for (int i = 2;
           i <= Math.Sqrt(n); i++)
  {
    if (n % i == 0)
      return false;
  }
  return true;
}
 
// Function to check if a prime number
// can be expressed as sum of
// two Prime Numbers
static bool isPossibleSum(int N)
{
  // If the N && (N-2) is Prime
  if (isPrime(N) && isPrime(N - 2))
  {
    return true;
  }
  else
  {
    return false;
  }
}
 
// Function to check semiPrime
static bool checkSemiprime(int num)
{
  int cnt = 0;
 
  // Loop from 2 to Math.Sqrt(num)
  for (int i = 2; cnt < 2 &&
           i * i <= num; ++i)
  {
    while (num % i == 0)
    {
      num /= i;
 
      // Increment the count of
      // prime numbers
      ++cnt;
    }
  }
 
  // If num is greater than 1, then
  // add 1 to it
  if (num > 1)
  {
    ++cnt;
  }
 
  // Return '1' if count is 2 else
  // return '0'
  return cnt == 2;
}
 
// Function to make the Cypher String
static void makeCypherString(int N)
{
  // Resultant String
  String semiPrime = "";
  String sumOfPrime = "";
 
  // Make String for the number N
  String str = String.Join("", N);
 
  // Check for semiPrime
  if (checkSemiprime(N))
  {
    // Traverse to make Cypher String
    for (int i = 0; i < str.Length; i++)
    {
      // If index is odd add the
      // current character
      if (i % 2 == 1)
      {
        semiPrime += str[i];
      }
 
      // Else current character is
      // changed
      else
      {
        semiPrime += (char)(str[i] -
                            '0' + 65);
      }
    }
  }
 
  // Check for sum of two primes
  if (isPossibleSum(N))
  {
    // Traverse to make Cypher String
    for (int i = 0; i < str.Length; i++)
    {
      // If index is odd then
      // current character is
      // changed
      if (i % 2 == 1)
      {
        sumOfPrime += (char)(str[i] -
                             '0' + 65);
      }
 
      // Else add the current
      // character
      else
      {
        sumOfPrime += str[i];
      }
    }
  }
 
  // If the resultant String is ""
  // then print -1
  if (semiPrime + sumOfPrime == "")
  {
    Console.Write("-1");
  }
 
  // Else print the resultant String
  else
  {
    Console.Write(semiPrime +
                  sumOfPrime);
  }
}
 
// Driver Code
public static void Main(String[] args)
{
  // Given Number
  int N = 1011243;
 
  // Function Call
  makeCypherString(N);
}
}
 
// This code is contributed by Rajput-Ji

Javascript

<script>
// Javascript program for
// the above approach
 
// Function to check
// whether a number
// is prime or not
function isPrime(n)
{
    if (n <= 1)
        return false;
  
  for (let i = 2; i <= Math.sqrt(n); i++)
  {
    if (n % i == 0)
      return false;
  }
  return true;
}
 
// Function to check if a prime number
// can be expressed as sum of
// two Prime Numbers
function isPossibleSum(N)
{
    // If the N && (N-2) is Prime
  if (isPrime(N) && isPrime(N - 2))
  {
    return true;
  }
  else
  {
    return false;
  }
}
 
// Function to check semiPrime
function checkSemiprime(num)
{
    let cnt = 0;
  
  // Loop from 2 to Math.sqrt(num)
  for (let i = 2; cnt < 2 &&
           i * i <= num; ++i)
  {
    while (num % i == 0)
    {
      num = Math.floor(num/i);
  
      // Increment the count of
      // prime numbers
      ++cnt;
    }
  }
  
  // If num is greater than 1, then
  // add 1 to it
  if (num > 1)
  {
    ++cnt;
  }
  
  // Return '1' if count is 2 else
  // return '0'
  return cnt == 2;
}
 
// Function to make the Cypher String
function makeCypherString(N)
{
    // Resultant String
  let semiPrime = "";
  let sumOfPrime = "";
  
  // Make String for the number N
  let str = (N).toString();
  
  // Check for semiPrime
  if (checkSemiprime(N))
  {
    // Traverse to make Cypher String
    for (let i = 0; i < str.length; i++)
    {
      // If index is odd add the
      // current character
      if (i % 2 == 1)
      {
        semiPrime += str[i];
      }
  
      // Else current character is
      // changed
      else
      {
        semiPrime += String.fromCharCode(str[i].charCodeAt(0) -
                            '0'.charCodeAt(0) + 65);
      }
    }
  }
  
  // Check for sum of two primes
  if (isPossibleSum(N))
  {
   
    // Traverse to make Cypher String
    for (let i = 0; i < str.length; i++)
    {
     
      // If index is odd then
      // current character is
      // changed
      if (i % 2 == 1)
      {
        sumOfPrime += String.fromCharCode(str[i].charCodeAt(0) -
                             '0'.charCodeAt(0) + 65);
      }
  
      // Else add the current
      // character
      else
      {
        sumOfPrime += str[i];
      }
    }
  }
  
  // If the resultant String is ""
  // then print -1
  if (semiPrime + sumOfPrime == "")
  {
    document.write("-1");
  }
  
  // Else print the resultant String
  else
  {
    document.write(semiPrime +
                     sumOfPrime);
  }
}
 
// Driver Code
 
// Given Number
  let N = 1011243;
  
  // Function Call
  makeCypherString(N);
 
// This code is contributed by avanitrachhadiya2155
</script>
Producción: 

B0B1C4D

 

Publicación traducida automáticamente

Artículo escrito por AbhijitTripathy 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 *