Open In App

Convert all lowercase characters to uppercase whose ASCII value is co-prime with k

Improve
Improve
Like Article
Like
Save
Share
Report

Given an integer ‘k’ and a string ‘str’ consisting of characters from English alphabets. The task is to convert all lower case character to uppercase whose ASCII value is co-prime with k.

Examples: 

Input: str = “geeksforgeeks”, k = 4 
Output: GEEKSfOrGEEKS 
‘f’ and ‘r’ are the only characters whose ASCII values aren’t co-prime with 4.

Input: str = “Ac”, k = 2 
Output: AC 
The only lower case character is ‘c’ and ASCII value of ‘c’ is 99 which is co-prime with 2. 

Approach: 

  • Iterate over all characters in the given string to check whether the current character is lowercase and if its ASCII value is co-prime with ‘k’
  • To check for co-prime, check that if the gcd of the value with k is ‘1’ or not.
  • If the above condition is satisfied then convert that lowercase alphabet to uppercase alphabet.

Below is the implementation of the above approach: 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// function to modify the string
void convert_str(string s, int k)
{
    // length of the string
    int l = s.length();
 
    for (int i = 0; i < l; i++) {
        int ascii = (int)s[i];
 
        // check if the character is
        // lowercase and co-prime with k
        if (ascii >= 'a' && ascii <= 'z'
            && __gcd(ascii, k) == 1) {
 
            // change the character
            // to upper-case
            char c = s[i] - 32;
            s[i] = c;
        }
    }
 
    cout << s << "\n";
}
 
// Driver code
int main()
{
    string s = "geeksforgeeks";
    int k = 4;
 
    convert_str(s, k);
 
    return 0;
}


Java




// Java implementation of the approach
class GFG
{
 
// function to modify the string
    static void convert_str(String str, int k)
    {
        // length of the string
        char[] s = str.toCharArray();
        int l = s.length;
 
        for (int i = 0; i < l; i++)
        {
            int ascii = (int) s[i];
 
            // check if the character is
            // lowercase and co-prime with k
            if (ascii >= 'a' && ascii <= 'z'
                    && __gcd(ascii, k) == 1)
            {
 
                // change the character
                // to upper-case
                char c = (char) (s[i] - 32);
                s[i] = c;
            }
        }
        System.out.println(String.valueOf(s));
    }
 
    static int __gcd(int a, int b)
    {
        // Everything divides 0
        if (a == 0
        {
            return b;
        }
        if (b == 0)
        {
            return a;
        }
 
        // base case
        if (a == b)
        {
            return a;
        }
 
        // a is greater
        if (a > b)
        {
            return __gcd(a - b, b);
        }
        return __gcd(a, b - a);
    }
 
    // Driver code
    public static void main(String[] args)
    {
        String s = "geeksforgeeks";
        int k = 4;
        convert_str(s, k);
    }
}
 
// This code is contributed by 29AjayKumar


Python3




# Python3 implementation of the approach
from math import gcd
 
# function to modify the string
def convert_str(s, k):
     
    modified_string = ""
    for i in range(0, len(s)):
        ascii = ord(s[i])
 
        # check if the character is
        # lowercase and co-prime with k
        if (ascii >= ord('a') and
            ascii <= ord('z') and
            gcd(ascii, k) == 1):
 
            # change the character to upper-case
            modified_string += chr(ascii - 32)
             
        else:
            modified_string += s[i]
 
    print(modified_string)
 
# Driver code
if __name__ == "__main__":
 
    s = "geeksforgeeks"
    k = 4
 
    convert_str(s, k)
 
# This code is contributed by Rituraj Jain


C#




// C# implementation of the approach
using System;
 
class GFG
{
 
    // function to modify the string
    static void convert_str(String str, int k)
    {
     
        // length of the string
        char[] s = str.ToCharArray();
        int l = s.Length;
 
        for (int i = 0; i < l; i++)
        {
            int ascii = (int) s[i];
 
            // check if the character is
            // lowercase and co-prime with k
            if (ascii >= 'a' && ascii <= 'z'
                    && __gcd(ascii, k) == 1)
            {
 
                // change the character
                // to upper-case
                char c = (char) (s[i] - 32);
                s[i] = c;
            }
        }
        Console.WriteLine(String.Join("", s));
    }
 
    static int __gcd(int a, int b)
    {
        // Everything divides 0
        if (a == 0)
        {
            return b;
        }
        if (b == 0)
        {
            return a;
        }
 
        // base case
        if (a == b)
        {
            return a;
        }
 
        // a is greater
        if (a > b)
        {
            return __gcd(a - b, b);
        }
        return __gcd(a, b - a);
    }
 
    // Driver code
    public static void Main()
    {
        String s = "geeksforgeeks";
        int k = 4;
        convert_str(s, k);
    }
}
 
// This code is contributed by PrinciRaj1992


Javascript




<script>
      // JavaScript implementation of the approach
      // function to modify the string
      function convert_str(s, k) {
        // length of the string
        var l = s.length;
        var newStr = "";
 
        for (var i = 0; i < l; i++) {
          var ascii = s[i].charCodeAt(0);
 
          // check if the character is
          // lowercase and co-prime with k
          if (
            ascii >= "a".charCodeAt(0) &&
            ascii <= "z".charCodeAt(0) &&
            __gcd(ascii, k) === 1
          ) {
            // change the character
            // to upper-case
            var c = String.fromCharCode(s[i].charCodeAt(0) - 32);
            newStr += c;
          } else {
            newStr += s[i];
          }
        }
        document.write(newStr);
      }
 
      function __gcd(a, b) {
        // Everything divides 0
        if (a === 0) {
          return b;
        }
        if (b === 0) {
          return a;
        }
 
        // base case
        if (a === b) {
          return a;
        }
 
        // a is greater
        if (a > b) {
          return __gcd(a - b, b);
        }
        return __gcd(a, b - a);
      }
 
      // Driver code
 
      var s = "geeksforgeeks";
      var k = 4;
      convert_str(s, k);
    </script>


PHP




<?php
// PHP implementation of the approach
 
// function to modify the string
function convert_str($str, $k)
{
    // length of the string
    $l = strlen($str);
    $modified_string = "";
 
    for ($i = 0; $i < $l; $i++)
    {
        $ascii = ord($str[$i]);
 
        // check if the character is
        // lowercase and co-prime with k
        if ($ascii >= ord('a') &&
            $ascii <= ord('z') &&
            __gcd($ascii, $k) == 1)
        {
 
            // change the character to upper-case
            $modified_string = $modified_string.chr($ascii - 32);
        }
        else
        {
            $modified_string = $modified_string.$str[$i];
        }
    }
    echo ($modified_string);
}
 
function __gcd($a, $b)
{
    // Everything divides 0
    if ($a == 0)
    {
        return $b;
    }
    if ($b == 0)
    {
        return $a;
    }
 
    // base case
    if ($a == $b)
    {
        return $a;
    }
 
    // a is greater
    if ($a > $b)
    {
        return __gcd($a - $b, $b);
    }
    return __gcd($a, $b - $a);
}
 
// Driver code
$s = "geeksforgeeks";
$k = 4;
convert_str($s, $k);
 
// This code is contributed by ita_c
?>


Output

GEEKSfOrGEEKS

Complexity Analysis:

  • Time Complexity: O(L), where L is the length of string.
  • Auxiliary Space: O(1)


Last Updated : 08 Feb, 2024
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads