# Maximum splits in binary string such that each substring is divisible by given odd number

Given a binary string **str**, the task is to calculate the maximum possible splits possible to make each substring divisible by a given odd number **K**.

**Examples:**

Input:str = “110111001”, K = 9

Output:2

Explanation:

The two possible substrings are “11011” and “1001”. The equivalent decimal values are 27 and 9 respectively which are divisible by 9.

Input:str = “10111001”, K = 5

Output:2

Explanation:

The two possible substrings are “101” and “11001”. The equivalent decimal values are 5 and 25 respectively which are divisible by 5.

**Approach:** In order to solve this problem, we traverse from the end of the string and generate the sum of the length traversed. As soon as the sum is divisible by **K**, we increase the **count** by 1 and reset **sum** to 0 and traverse forward and repeat the same process. On full traversal of the string, if **sum** has been reset to 0, then the value of the **count** gives the required maximum possible splits. Otherwise, print *“Not Possible”* as all segments are not divisible by **K**.

Below code is the implementation of the above approach:

## C++

`// C++ Program to split ` `// a given binary string ` `// into maximum possible ` `// segments divisible by ` `// given odd number K ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` `// Function to calculate ` `// maximum splits possible ` `void` `max_segments(string str, ` `int` `K) ` `{ ` ` ` `int` `n = str.length(); ` ` ` `int` `s = 0, sum = 0, count = 0; ` ` ` `for` `(` `int` `i = n - 1; i >= 0; i--) { ` ` ` `int` `a = str[i] - ` `'0'` `; ` ` ` `sum += a * ` `pow` `(2, s); ` ` ` ` ` `s++; ` ` ` `if` `(sum != 0 && sum % K == 0) { ` ` ` `count++; ` ` ` `sum = 0; ` ` ` `s = 0; ` ` ` `} ` ` ` `} ` ` ` `if` `(sum != 0) ` ` ` `cout << ` `"-1"` `<< endl; ` ` ` `else` ` ` `cout << count << endl; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `string str = ` `"10111001"` `; ` ` ` `int` `K = 5; ` ` ` `max_segments(str, K); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java code to split a given ` `// binary string into maximum ` `// possible segments divisible ` `// by given odd number K ` `import` `java.io.*; ` `import` `java.util.*; ` ` ` `class` `GFG{ ` ` ` `// Function to calculate ` `// maximum splits possible ` `static` `void` `rearrange(String str, ` `int` `K) ` `{ ` ` ` `int` `n = str.length(); ` ` ` `int` `s = ` `0` `, sum = ` `0` `, count = ` `0` `; ` ` ` ` ` `for` `(` `int` `i = n - ` `1` `; i >= ` `0` `; i--) ` ` ` `{ ` ` ` `int` `a = str.charAt(i) - ` `'0'` `; ` ` ` `sum += a * Math.pow(` `2` `, s); ` ` ` `s++; ` ` ` ` ` `if` `(sum != ` `0` `&& sum % K == ` `0` `) ` ` ` `{ ` ` ` `count++; ` ` ` `sum = ` `0` `; ` ` ` `s = ` `0` `; ` ` ` `} ` ` ` `} ` ` ` ` ` `if` `(sum != ` `0` `) ` ` ` `System.out.println(` `"-1"` `); ` ` ` `else` ` ` `System.out.println(count); ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `String str = ` `"10111001"` `; ` ` ` `int` `K = ` `5` `; ` ` ` ` ` `rearrange(str, K); ` `} ` `} ` ` ` `// This code is contributed by coder001 ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to split ` `# a given binary string ` `# into maximum possible ` `# segments divisible by ` `# given odd number K ` ` ` `# Function to calculate ` `# maximum splits possible ` `def` `max_segments(st, K): ` ` ` ` ` `n ` `=` `len` `(st) ` ` ` `s, ` `sum` `, count ` `=` `0` `, ` `0` `, ` `0` ` ` ` ` `for` `i ` `in` `range` `(n ` `-` `1` `, ` `-` `1` `, ` `-` `1` `): ` ` ` `a ` `=` `ord` `(st[i]) ` `-` `48` ` ` `sum` `+` `=` `a ` `*` `pow` `(` `2` `, s) ` ` ` `s ` `+` `=` `1` ` ` ` ` `if` `(` `sum` `!` `=` `0` `and` `sum` `%` `K ` `=` `=` `0` `): ` ` ` `count ` `+` `=` `1` ` ` `sum` `=` `0` ` ` `s ` `=` `0` ` ` ` ` `if` `(` `sum` `!` `=` `0` `): ` ` ` `print` `(` `"-1"` `) ` ` ` `else` `: ` ` ` `print` `(count) ` ` ` `# Driver code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` ` ` `st ` `=` `"10111001"` ` ` `K ` `=` `5` ` ` `max_segments(st, K) ` ` ` `# This code is contributed by chitranayal ` |

*chevron_right*

*filter_none*

**Output:**

2

## Recommended Posts:

- Minimum splits in a binary string such that every substring is a power of 4 or 6.
- Maximum number of set bits count in a K-size substring of a Binary String
- Maximum number of splits of a binary number
- Number of subsequences in a given binary string divisible by 2
- Number of sub-strings in a given binary string divisible by 2
- Number of sub-sequences of non-zero length of a binary string divisible by 3
- Find the maximum possible Binary Number from given string
- Lexicographical Maximum substring of string
- Minimum steps to remove substring 010 from a binary string
- Maximum length substring with highest frequency in a string
- Largest sub-string of a binary string divisible by 2
- Maximize count of 0s in left and 1s in right substring by splitting given Binary string
- Minimum flips required in a binary string such that all K-size substring contains 1
- Decimal representation of given binary string is divisible by 20 or not
- Longest sub-sequence of a binary string divisible by 3
- Decimal representation of given binary string is divisible by 10 or not
- Decimal representation of given binary string is divisible by 5 or not
- Number of binary strings such that there is no substring of length ≥ 3
- Minimum swaps required to make a binary string divisible by 2^k
- Number of ways to split a binary number such that every part is divisible by 2

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.