Given a number N, the task is to convert the given number into a Cypher string on the basis of below conditions:
- If N is a semiprime, then change every digit at even places of N to it’s corresponding matched alphabet as shown below.
- If N can be written as a sum of two primes, then change every digit at odd places of N to it’s corresponding matched alphabet as shown below.
- If both the condition satisfy the concatenate the above two strings formed.
- If N can’t satisfy the above three criteria, then print “-1”.
Below is the list of matched character:
Examples:
Input: N = 61
Output: 6B
Explanation:
Since 61 can be expressed as a sum of two primes: 61 = 2 + 59
Therefore, the resultant string after changing the character at even index is “6B”.
Input: N = 1011243
Output: B0B1C4D
Explanation:
Since 1011243 is Semiprime number: 1011243 = 3 * 337081
Therefore, the resultant string after change the character at even index is “B0B1C4D”.
Approach:
- Check if the given number N is semi prime or not by using the approach discussed in this article. If yes, then do the following:
- Convert the given number N to string(say str) using to_string() function.
- Traverse the above string formed and changed the characters at even index as:
str[i] = char((str[i] - '0') + 65)
- Print the new string formed.
- Check if the given number N can be expressed as a sum of two prime numbers or not using the approach discussed in this article. If yes, then do the following:
- Convert the given number N to string(say str) using to_string() function.
- Traverse the above string formed and changed the characters at odd index as:
str[i] = char((str[i] - '0') + 65)
- Print the new string formed.
- If the above two condition doesn’t satisfy then we can’t form Cypher String. Print “-1”.
Below is the implementation of the above approach:
// 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 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 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# 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 |
<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> |
B0B1C4D