# Check whether a large number is divisible by 53 or not

• Last Updated : 21 Jul, 2022

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++

 `// C++ program to check``// whether a number``// is divisible by 53 or not``#include ``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;``}`

## Java

 `// 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`

## Python3

 `# 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`

## C#

 `// 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`

## Javascript

 `// JavaScript program to check``// whether a number``// is divisible by 53 or not`  `// Function to check if the``// number is divisible by 53 or not``function` `isDivisible(s)``{``    ``s = Array.from(s);``    ``let flag = 0;``    ``while` `(s.length > 4) {` `        ``let l = s.length - 1;``        ``let x = parseInt(s[l]) * 37;` `        ` `        ``s.reverse();``        ``s.shift();` `        ``let i = 0, carry = 0;``        ``while` `(x > 0) {``            ``let d = (parseInt(s[i]))``                    ``- (x % 10)``                    ``- carry;``            ``if` `(d < 0) {``                ``d += 10;``                ``carry = 1;``            ``}``            ``else``                ``carry = 0;``            ` `            ``s[i] = d.toString();``            ``x = Math.floor(x / 10);``            ``i++;``        ``}``        ``while` `((carry > 0) && i < l) {``            ``let d = parseInt(s[i]) - carry;``            ``if` `(d < 0) {``                ``d += 10;``                ``carry = 1;``            ``}``            ``else``                ``carry = 0;``            ``s[i] = d.toString();` `            ``i++;``        ``}``        ` `        ``s.reverse();``    ``}` `    ``let num = parseInt((s).join(``""``));` `    ``if` `(num % 53 == 0)``        ``return` `true``;``    ``else``        ``return` `false``;``}`  `// Driver Code``let N = ``"18432462191076"``;` `if` `(isDivisible(N))``    ``console.log(``"Yes"``);``else``    ``console.log(``"No"``);`  `// This code is contributed by phasing17`

Output:

`Yes`

Time Complexity: O(n), where n is the size of the given string N
Auxiliary Space: O(1), as no extra space is required

My Personal Notes arrow_drop_up