# Number of substrings divisible by 4 in a string of integers

Given a string consisting of integers 0 to 9. The task is to count the number of substrings which when converted into integer are divisible by 4. Substring may contain leading zeroes.

**Examples:**

Input : "124" Output : 4 Substrings divisible by 4 are "12", "4", "24", "124" . Input : "04" Output : 3 Substring divisible by 4 are "0", "4", "04" .

**Method 1: (Brute Force)** The idea is to find all the substrings of the given string and check if substring is divisible by 4 or not.

**Time Complexity: O( ).**

**Efficient solution :** A number is divisible by 4 if its last two digits are divisible by 4 and single-digit numbers divisible by 4 are 4, 8 and 0. So, to calculate the number of substrings divisible by 4 we first count number of 0’s, 4’s and 8’s in the string. Then, we make all pairs of two consecutive characters and convert it into an integer. After converting it into integer we check that whether it is divisible by 4 or not. If it is divisible by 4 then all such substring ending with this last two characters are divisible by 4. Now, ** the number of such substrings are basically the index of 1st character of pair**. To make it more clear, consider string “14532465” then possible pairs are “14”, “45”, “53”, “32”, “24”, “46”, “65” . In these pairs only “32” and “24” when converted into integer are divisible by 4. Then, substrings ( length >= 2 ) divisible by 4 must end with either “32” or “24” So, number of substrings ending with “32” are “14532”, “4532”, “532”, “32” i.e 4 and index of ‘3’ is also 4 . Similarly, the number of substrings ending with “24” is 5.

Thus we get an O(n) solution. Below is the implementation of this approach .

## C/C++

`// C++ program to count number of substrings ` `// divisible by 4. ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `int` `countDivisbleby4(` `char` `s[]) ` `{ ` ` ` `int` `n = ` `strlen` `(s); ` ` ` ` ` `// In the first loop we will count number of ` ` ` `// 0's, 4's and 8's present in the string ` ` ` `int` `count = 0; ` ` ` `for` `(` `int` `i = 0; i < n; ++i) ` ` ` `if` `(s[i] == ` `'4'` `|| s[i] == ` `'8'` `|| s[i] == ` `'0'` `) ` ` ` `count++ ; ` ` ` ` ` `// In second loop we will convert pairs ` ` ` `// of two consecutive characters into ` ` ` `// integer and store it in variable h . ` ` ` `// Then we check whether h is divisible by 4 ` ` ` `// or not . If h is divisible we increases ` ` ` `// the count with ( i + 1 ) as index of ` ` ` `// first character of pair ` ` ` `for` `(` `int` `i = 0; i < n - 1; ++i) { ` ` ` `int` `h = ( s[i] - ` `'0'` `) * 10 + ( s[i+1] - ` `'0'` `); ` ` ` `if` `(h % 4 == 0) ` ` ` `count = count + i + 1 ; ` ` ` `} ` ` ` ` ` `return` `count; ` `} ` ` ` `// Driver code to test above function ` `int` `main() ` `{ ` ` ` `char` `s[] = ` `"124"` `; ` ` ` `cout << countDivisbleby4(s); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to count number of substrings ` `// divisible by 4 ` `import` `java.io.*; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to count number of substrings ` ` ` `// divisible by 4 ` ` ` `static` `int` `countDivisbleby4(String s) ` ` ` `{ ` ` ` `int` `n = s.length(); ` ` ` ` ` `// In the first loop we will count number of ` ` ` `// 0's, 4's and 8's present in the string ` ` ` `int` `count = ` `0` `; ` ` ` `for` `(` `int` `i = ` `0` `; i < n; ++i) ` ` ` `if` `(s.charAt(i) == ` `'4'` `|| s.charAt(i) == ` `'8'` `|| s.charAt(i) == ` `'0'` `) ` ` ` `count++ ; ` ` ` ` ` `// In second loop we will convert pairs ` ` ` `// of two consecutive characters into ` ` ` `// integer and store it in variable h . ` ` ` `// Then we check whether h is divisible by 4 ` ` ` `// or not . If h is divisible we increases ` ` ` `// the count with ( i + 1 ) as index of ` ` ` `// first character of pair ` ` ` `for` `(` `int` `i = ` `0` `; i < n - ` `1` `; ++i) ` ` ` `{ ` ` ` `int` `h = ( s.charAt(i) - ` `'0'` `) * ` `10` `+ ( s.charAt(i+` `1` `) - ` `'0'` `); ` ` ` `if` `(h % ` `4` `== ` `0` `) ` ` ` `count = count + i + ` `1` `; ` ` ` `} ` ` ` ` ` `return` `count; ` ` ` `} ` ` ` ` ` `// driver program ` ` ` `public` `static` `void` `main (String[] args) ` ` ` `{ ` ` ` `String s = ` `"124"` `; ` ` ` `System.out.println(countDivisbleby4(s)); ` ` ` `} ` `} ` ` ` `// Contributed by Pramod Kumar ` |

*chevron_right*

*filter_none*

## Python3

`# Python 3 program to count the number of substrings ` `# divisible by 4. ` ` ` `def` `countDivisbleby4(s): ` ` ` `n ` `=` `len` `(s) ` ` ` ` ` `# In the first loop we will count number of ` ` ` `# 0's, 4's and 8's present in the string ` ` ` `count ` `=` `0` `; ` ` ` `for` `i ` `in` `range` `(` `0` `,n,` `1` `): ` ` ` `if` `(s[i] ` `=` `=` `'4'` `or` `s[i] ` `=` `=` `'8'` `or` `s[i] ` `=` `=` `'0'` `): ` ` ` `count ` `+` `=` `1` ` ` ` ` `# In second loop we will convert pairs ` ` ` `# of two consecutive characters into ` ` ` `# integer and store it in variable h . ` ` ` `# Then we check whether h is divisible by 4 ` ` ` `# or not . If h is divisible we increases ` ` ` `# the count with ( i + 1 ) as index of ` ` ` `# first character of pair ` ` ` `for` `i ` `in` `range` `(` `0` `,n ` `-` `1` `,` `1` `): ` ` ` `h ` `=` `(` `ord` `(s[i]) ` `-` `ord` `(` `'0'` `)) ` `*` `10` `+` `(` `ord` `(s[i` `+` `1` `]) ` `-` `ord` `(` `'0'` `)) ` ` ` `if` `(h ` `%` `4` `=` `=` `0` `): ` ` ` `count ` `=` `count ` `+` `i ` `+` `1` ` ` ` ` `return` `count ` ` ` `# Driver code to test above function ` `if` `__name__ ` `=` `=` `'__main__'` `: ` ` ` `s ` `=` `[` `'1'` `,` `'2'` `,` `'4'` `] ` ` ` `print` `(countDivisbleby4(s)) ` ` ` `# This code is contributed by ` `# Surendra_Gangwar ` |

*chevron_right*

*filter_none*

## C#

`// C# program to count number of ` `// substrings divisible by 4 ` `using` `System; ` ` ` `public` `class` `GFG ` `{ ` ` ` ` ` `// Function to count number of ` ` ` `// substrings divisible by 4 ` ` ` `static` `int` `countDivisbleby4(` `string` `s) ` ` ` `{ ` ` ` `int` `n = s.Length; ` ` ` ` ` `// In the first loop we will count ` ` ` `// number of 0's, 4's and 8's present ` ` ` `// in the string ` ` ` `int` `count = 0; ` ` ` `for` `(` `int` `i = 0; i < n; ++i) ` ` ` ` ` `if` `(s[i] == ` `'4'` `|| s[i] == ` `'8'` ` ` `|| s[i] == ` `'0'` `) ` ` ` `count++ ; ` ` ` ` ` `// In second loop we will convert pairs ` ` ` `// of two consecutive characters into ` ` ` `// integer and store it in variable h . ` ` ` `// Then we check whether h is divisible ` ` ` `// by 4 or not . If h is divisible, we ` ` ` `// increases the count with ( i + 1 ) ` ` ` `// as index of first character of pair ` ` ` `for` `(` `int` `i = 0; i < n - 1; ++i) ` ` ` `{ ` ` ` `int` `h = (s[i] - ` `'0'` `) * 10 + ` ` ` `(s[i + 1] - ` `'0'` `); ` ` ` `if` `(h % 4 == 0) ` ` ` `count = count + i + 1 ; ` ` ` `} ` ` ` ` ` `return` `count; ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `Main () ` ` ` `{ ` ` ` `string` `s = ` `"124"` `; ` ` ` `Console.WriteLine(countDivisbleby4(s)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Sam007 ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to count number ` `// of substrings divisible by 4. ` ` ` `function` `countDivisbleby4( ` `$s` `) ` `{ ` ` ` `$n` `= ` `strlen` `(` `$s` `); ` ` ` ` ` `// In the first loop we ` ` ` `// will count number of ` ` ` `// 0's, 4's and 8's present ` ` ` `// in the string ` ` ` `$count` `= 0; ` ` ` `for` `(` `$i` `= 0; ` `$i` `< ` `$n` `; ++` `$i` `) ` ` ` `if` `(` `$s` `[` `$i` `] == ` `'4'` `or` `$s` `[` `$i` `] == ` `'8'` ` ` `or` `$s` `[` `$i` `] == ` `'0'` `) ` ` ` `$count` `++ ; ` ` ` ` ` `// In second loop we will convert pairs ` ` ` `// of two consecutive characters into ` ` ` `// integer and store it in variable h . ` ` ` `// Then we check whether h is divisible by 4 ` ` ` `// or not . If h is divisible we increases ` ` ` `// the count with ( i + 1 ) as index of ` ` ` `// first character of pair ` ` ` `for` `( ` `$i` `= 0; ` `$i` `< ` `$n` `- 1; ++` `$i` `) ` ` ` `{ ` ` ` `$h` `= ( ` `$s` `[` `$i` `] - ` `'0'` `) * 10 + ` ` ` `( ` `$s` `[` `$i` `+1] - ` `'0'` `); ` ` ` `if` `(` `$h` `% 4 == 0) ` ` ` `$count` `= ` `$count` `+ ` `$i` `+ 1 ; ` ` ` `} ` ` ` ` ` `return` `$count` `; ` `} ` ` ` ` ` `// Driver Code ` ` ` `$s` `= ` `"124"` `; ` ` ` `echo` `countDivisbleby4(` `$s` `); ` ` ` `// This code is contributed by anuj_67. ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

4

This article is contributed by **Surya Priy**. 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

## Recommended Posts:

- Number of substrings divisible by 6 in a string of integers
- Number of substrings divisible by 8 but not by 3
- Number of substrings of a string
- Number of even substrings in a string of digits
- Number of subsequences in a string divisible by n
- Count of m digit integers that are divisible by an integer n
- Count integers in a range which are divisible by their euler totient value
- Ways to form an array having integers in given range such that total sum is divisible by 2
- Count the number of pairs (i, j) such that either arr[i] is divisible by arr[j] or arr[j] is divisible by arr[i]
- Remove characters from a numeric string such that string becomes divisible by 8
- Number of balanced parenthesis substrings
- Count number of distinct substrings of a given length
- Count number of substrings with numeric value greater than X
- Number of ways of choosing K equal substrings of any length for every query
- Find the number of integers x in range (1,N) for which x and x+1 have same number of divisors