# Divisible by 37 for large numbers

Given a large number n, we need to check whether it is divisible by 37. Print true if it is divisible by 37 otherwise False.
Examples:

Input  : 74
Output : True

Input : 73
Output : False

Input : 8955795758 (10 digit number)
Output : True

A r digit number m whose digital form is (ar-1 ar-2â€¦.a2 a1 a0) is divisible by 37 if and only if the sum of series of numbers (a2 a1 a0) + (a5 a4 a3) + (a8 a7 a6) + â€¦ is divisible by 37. The triplets of digits within parenthesis represent 3-digit number in digital form.

The given number n can be written as a sum of powers of 1000 as follows.
n = (a2 a1 a0) + (a5 a4 a3)*1000 + (a8 a7 a6)*(1000*1000) +â€¦.
As 1000 = (1)(mod 37), 1000 as per congruence relation.
For a positive integer n, two numbers a and b are said to be congruent modulo n, if their difference
(a – b) is an integer multiple of n (that is, if there is an integer k such that a â€“ b = kn). This congruence relation is typically considered when a and b are integers, and is denoted

Hence we can write:
n = { (a2a1a0) + (a5a4a3)* (1) + (a8a7a6)* (1)*(1)+â€¦..}(mod 37),
Thus n is divisible by 37 if and if only if the series is divisible by 37.

Examples:

Input : 8955795758 (10 digit number)
Output : True
Explanation:
We express the number in terms of
triplets of digits as follows.
(008)(955)(795)(758)
Now, 758 + 795 + 955 + 8 = 2516
For 2516, the triplets will be:
(002)(516)
Now 516 + 2 = 518 which is divisible
by 37. Hence the number is divisible
by 37.

Input : 189710809179199 (15 digit number)
Output : False

A simple and efficient method is to take input in form of string (make its length in form of 3*m by adding 0 to left of number if required) and then you have to add the digits in blocks of three from right to left until it become a 3 digit number to form an series . Calculate the sum of the series. If the sum of series has more than 3 digits in it, again recursively call this function.
Finally check whether the resultant sum is divisible by 37 or not.
Here is the program implementation to check divisibility by 37.

## C++

 // CPP program for checking divisibility by 37 // function divisible37 which returns True if  // number is divisible by 37 otherwise False #include  using namespace std;   int divisibleby37(string n){     int l = n.length();     if (n == "0")         return 0;       // Append required 0's at the beginning     if (l % 3 == 1){         n = "00"+ n;         l += 2;     }     else if (l % 3 == 2){         n = "0"+ n;         l += 1;     }           int gSum = 0;           while (l != 0){       // group saves 3-digit group     string group = n.substr(l - 3, l);         l = l - 3;     int gvalue = (group[0] - '0') * 100 +                   (group[1] - '0') * 10 +                  (group[2] - '0') * 1;                        // add the series     gSum = gSum + gvalue;     }           // if sum of series gSum has minimum 4      // digits in it, then again recursive      // call divisibleby37 function     if (gSum >= 1000)         return (divisibleby37(to_string(gSum)));     else         return (gSum % 37 == 0);   }   // driver program to test the above function int main(){       string s="8955795758";           if (divisibleby37(s))     cout<<"True";     else     cout<<"False";     return 0; } // This code is contributed by Prerna Saini

## Java

 // Java program for checking  // divisibility by 37    class GFG  {  // function divisible37 which  // returns True if number is  // divisible by 37 otherwise False  static int divisibleby37(String n1)  {      int l = n1.length();     if (n1 == "0")          return 0;        // Append required 0's      // at the beginning      if (l % 3 == 1)      {          n1 = "00"+ n1;          l += 2;      }      else if (l % 3 == 2)      {          n1 = "0"+ n1;          l += 1;      }      char[]  n= n1.toCharArray();     int gSum = 0;      while (l != 0)      {        // group saves 3-digit group      int gvalue;      if(l == 2)          gvalue = ((int)n[(l - 2)] - 48) * 100 +                  ((int)n[(l - 1)] - 48) * 10;      else if(l == 1)          gvalue = ((int)n[(l - 1)] - 48) * 100;      else         gvalue = ((int)n[(l - 3)] - 48) * 100 +                  ((int)n[(l - 2)] - 48) * 10 +                  ((int)n[(l - 1)] - 48) * 1;      l = l - 3;            // add the series      gSum = gSum + gvalue;      }            // if sum of series gSum has minimum 4      // digits in it, then again recursive      // call divisibleby37 function      if (gSum >= 1000)          return (divisibleby37(String.valueOf(gSum)));      else         return (gSum % 37 == 0) ? 1 : 0;    }    // Driver Code  public static void main(String[] args)  {      String s="8955795758";            if (divisibleby37(s) == 1)      System.out.println("True");      else     System.out.println("False");  }  }    // This code is contributed by mits

## Python3

 # Python code for checking divisibility by 37 # function divisible37 which returns True if  # number is divisible by 37 otherwise False def divisibleby37(n):     l = len(n)     if (n == 0):         return True         # Append required 0's at the beginning     if (l%3 == 1):         n = "00"+ n         l += 2     elif (l%3 == 2):         n = "0"+ n         l += 1       gSum = 0     while (l != 0):           # group saves 3-digit group         group = int(n[l-3:l])         l = l-3           # add the series         gSum = gSum + group       # if sum of series gSum has minimum 4      # digits in it, then again recursive      # call divisibleby37 function     if (gSum >= 1000):         return(divisibleby37(str(gSum)))     else:         return (gSum%37==0)   # Driver method to test the above function print(divisibleby37("8955795758"))

## C#

 // C# program for checking  // divisibility by 37 using System;   class GFG { // function divisible37 which  // returns True if number is  // divisible by 37 otherwise False static int divisibleby37(string n) {     int l = n.Length;     if (n == "0")         return 0;       // Append required 0's     // at the beginning     if (l % 3 == 1)     {         n = "00"+ n;         l += 2;     }     else if (l % 3 == 2)     {         n = "0"+ n;         l += 1;     }           int gSum = 0;     while (l != 0)     {       // group saves 3-digit group     int gvalue;     if(l == 2)         gvalue = ((int)n[(l - 2)] - 48) * 100 +                   ((int)n[(l - 1)] - 48) * 10;     else if(l == 1)         gvalue = ((int)n[(l - 1)] - 48) * 100;     else         gvalue = ((int)n[(l - 3)] - 48) * 100 +                   ((int)n[(l - 2)] - 48) * 10 +                  ((int)n[(l - 1)] - 48) * 1;     l = l - 3;           // add the series     gSum = gSum + gvalue;     }           // if sum of series gSum has minimum 4      // digits in it, then again recursive      // call divisibleby37 function     if (gSum >= 1000)         return (divisibleby37(gSum.ToString()));     else         return (gSum % 37 == 0) ? 1 : 0;   }   // Driver Code public static void Main() {     string s="8955795758";           if (divisibleby37(s) == 1)     Console.WriteLine("True");     else     Console.WriteLine("False"); } }   // This code is contributed by mits

## PHP

 = 1000)         return (divisibleby37((string)($gSum)));  else  return ($gSum % 37 == 0);   }   // Driver code $s = "8955795758"; if (divisibleby37($s)) echo "True"; else echo "False";   // This code is contributed // by mits ?>

## Javascript

 

Output

True

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

Method: Checking given number is divisible by 37 or not by using modulo division operator “%”.

## C++

 // C++ code To check whether the given number is divisible // by 37 or not   #include  using namespace std;   int main() {       // input number     int num = 8955;     // checking if the given number is divisible by 37 or     // not using modulo division operator if the output of     // num%37 is equal to 0 then given number is divisible     // by 37 otherwise not divisible by 37     if (num % 37 == 0) {         cout << " divisible";     }     else {         cout << " not divisible";     }     return 0; }

## Java

 // Java code To check whether the given number is divisible // by 37 or not import java.util.*;   class GFG {   public static void main(String[] args)   {       // input number     int num = 8955;       // checking if the given number is divisible by 37 or     // not using modulo division operator if the output of     // num%37 is equal to 0 then given number is divisible     // by 37 otherwise not divisible by 37     if (num % 37 == 0) {       System.out.println(" divisible");     }     else {       System.out.println(" not divisible");     }   } }   // This code is contributed by phasing17

## Python3

 # Python code  # To check whether the given number is divisible by 37 or not   #input  n=8955795758 # the above input can also be given as n=input() -> taking input from user # finding given number is divisible by 37 or not if int(n)%37==0:   print("true")  else:    print("false")        # this code is contributed by gangarajula laxmi

## C#

 using System;   public class GFG {       static public void Main()     {           // input number         long num = 8955795758;       // checking if the given number is divisible by 37 or     // not using modulo division operator if the output of     // num%37 is equal to 0 then given number is divisible     // by 37 otherwise not divisible by 37         if (num % 37 == 0) {             Console.Write("Yes");         }         else {             Console.Write("No");         }     } }   // This code is contributed by laxmigangarajula03

## Javascript

 

## PHP

 

Output

true

Time Complexity: O(1)
Auxiliary Space: O(1)

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