Check whether a large number is divisible by 53 or not

Given a large number in the form of a string N, the task is to check whether the number is divisible by 53 or not.

Examples:

Input: N = 5299947
Output: Yes

Input: N = 54
Output: No

Approach:



  • Extract the last digit of the given string N and remove it.
  • Multiply that digit by 37.
  • Subtract the product calculated in the above step from the remaining number.
  • Continue until we reduce the given string to a 3 or four digit number.
  • Convert the remaining string to its corresponding integer form and check if it is divisible by 53 or not.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check
// whether a number
// is divisible by 53 or not
#include <bits/stdc++.h>
using namespace std;
  
// Function to check if the
// number is divisible by 53 or not
bool isDivisible(string s)
{
    int flag = 0;
    while (s.size() > 4) {
  
        int l = s.size() - 1;
        int x = (s[l] - '0') * 37;
  
        reverse(s.begin(), s.end());
        s.erase(0, 1);
  
        int i = 0, carry = 0;
        while (x) {
            int d = (s[i] - '0')
                    - (x % 10)
                    - carry;
            if (d < 0) {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
  
            s[i] = (char)(d + '0');
            x /= 10;
            i++;
        }
  
        while (carry && i < l) {
            int d = (s[i] - '0') - carry;
            if (d < 0) {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
  
            s[i] = (char)(d + '0');
  
            i++;
        }
  
        reverse(s.begin(), s.end());
    }
  
    int num = 0;
    for (int i = 0; i < s.size(); i++) {
        num = num * 10 + (s[i] - '0');
    }
  
    if (num % 53 == 0)
        return true;
    else
        return false;
}
  
// Driver Code
int main()
{
    string N = "18432462191076";
  
    if (isDivisible(N))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check whether 
// a number is divisible by 53 or not
import java.util.*;
  
class GFG{
  
// Function to check if the
// number is divisible by 53 or not
static boolean isDivisible(char []s)
{
    while (s.length > 4)
    {
        int l = s.length - 1;
        int x = (s[l] - '0') * 37;
  
        s = reverse(s);
        s = Arrays.copyOfRange(s, 1, s.length);
  
        int i = 0, carry = 0;
        while (x > 0
        {
            int d = (s[i] - '0') - 
                        (x % 10) - 
                        carry;
                      
            if (d < 0)
            {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
  
            s[i] = (char)(d + '0');
            x /= 10;
            i++;
        }
  
        while (carry > 0 && i < l)
        {
            int d = (s[i] - '0') - carry;
            if (d < 0)
            {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
  
            s[i] = (char)(d + '0');
            i++;
        }
        s = reverse(s);
    }
  
    int num = 0;
    for(int i = 0; i < s.length; i++) 
    {
       num = num * 10 + (s[i] - '0');
    }
  
    if (num % 53 == 0)
        return true;
    else
        return false;
}
  
static char[] reverse(char []a)
{
    int l, r = a.length - 1;
      
    for(l = 0; l < r; l++, r--)
    {
       char temp = a[l];
            a[l] = a[r];
            a[r] = temp;
    }
    return a;
}
  
// Driver Code
public static void main(String[] args)
{
    String N = "18432462191076";
  
    if (isDivisible(N.toCharArray()))
        System.out.print("Yes" + "\n");
    else
        System.out.print("No" + "\n");
}
}
  
// This code is contributed by Rohit_ranjan

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check whether a  
# number is divisible by 53 or not
  
# Function to check if the
# number is divisible by 53 or not
def isDivisible(s):
      
    flag = 0
      
    while (len(s) > 4):
        l = len(s) - 1
        x = (ord(s[l]) - ord('0')) * 37
  
        s = s[::-1]
        s = s.replace('0', '', 1)
  
        i = 0
        carry = 0
          
        while (x):
            d = ((ord(s[i]) - ord('0')) - 
                 (x % 10) - carry)
            if (d < 0):
                d += 10
                carry = 1
            else:
                carry = 0
                  
            s = s.replace(s[i], chr(d + ord('0')), 1)
            x //= 10
            i += 1
  
        while (carry and i < l):
            d = (ord(s[i]) - ord('0')) - carry
              
            if (d < 0):
                d += 10
                carry = 1
            else:
                carry = 0
              
            s = s.replace(s[i], chr(d + ord('0')), 1)
            i += 1
        s = s[::-1]
  
    num = 0
    for i in range(len(s)):
        num = num * 10 + (ord(s[i]) - ord('0'))
  
    if (num % 53 == 0):
        return True
    else:
        return False
  
# Driver Code
if __name__ == '__main__':
      
    N = "1843246219106"
  
    if (isDivisible(N)):
        print("No")
    else:
        print("Yes")
  
# This code is contributed by Surendra_Gangwar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check whether  
// a number is divisible by 53 or not 
using System; 
using System.Collections; 
using System.Collections.Generic; 
  
class GFG{
      
// Function to check if the
// number is divisible by 53 or not
static bool isDivisible(char []s)
{
    while (s.Length > 4)
    {
        int l = s.Length - 1;
        int x = (s[l] - '0') * 37;
  
        s = reverse(s);
          
        char []tmp = new char[s.Length - 1];
          
        Array.Copy(s, 1, tmp, 0, s.Length - 1);
        s = tmp;
          
        int i = 0, carry = 0;
        while (x > 0) 
        {
            int d = (s[i] - '0') - 
                       (x % 10) - carry;
                         
            if (d < 0)
            {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
  
            s[i] = (char)(d + '0');
            x /= 10;
            i++;
        }
  
        while (carry > 0 && i < l)
        {
            int d = (s[i] - '0') - carry;
            if (d < 0)
            {
                d += 10;
                carry = 1;
            }
            else
                carry = 0;
  
            s[i] = (char)(d + '0');
            i++;
        }
        s = reverse(s);
    }
  
    int num = 0;
    for(int i = 0; i < s.Length; i++) 
    {
        num = num * 10 + (s[i] - '0');
    }
  
    if (num % 53 == 0)
        return true;
    else
        return false;
}
  
static char[] reverse(char []a)
{
    int l, r = a.Length - 1;
      
    for(l = 0; l < r; l++, r--)
    {
        char temp = a[l];
             a[l] = a[r];
             a[r] = temp;
    }
    return a;
}
  
// Driver Code
public static void Main(string[] args)
{
    string N = "18432462191076";
  
    if (isDivisible(N.ToCharArray()))
        Console.Write("Yes" + "\n");
    else
        Console.Write("No" + "\n");
}
}
  
// This code is contributed by rutvik_56

chevron_right


Output:

Yes

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.