# Find the minimum positive integer such that it is divisible by A and sum of its digits is equal to B

Given two integers **A** and **B**, the task is to find the minimum positive integer **N** such that **N** is divisible by **A** and the sum of the digits of **N** is equal to **B**. If number is not found then print **-1**.**Examples:**

Input:A = 20, B = 30Output:49980

49980 is divisible by 20 and sum of its digit = 4 + 9 + 9 + 8 + 0 = 30Input:A = 5, B = 2Output:20

**Approach:**

- Create empty queue
**q**that stores the value of**A**and**B**and output number as a string and create integer type 2-D array**visited[][]**that stores the visited digit. - Insert Node into queue and check if queue is non-empty.
- While the queue is non-empty, pop an element from the queue and for every digit from
**1**to**9**, concatenate the digit after the string num and check whether the number formed is the required number. - If the required number is found, print the number.
- Else repeat the steps while the number is less than
**B**and the queue is non-empty while pushing the non-visited number to the queue.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Array that stores visited digits` `int` `visited[501][5001];` `// Structure for queue Node.` `struct` `Node {` ` ` `int` `a, b;` ` ` `string str;` `};` `// Function to return the minimum number such that it is` `// divisible by 'a' and sum of its digits is equals to 'b'` `int` `findNumber(` `int` `a, ` `int` `b)` `{` ` ` `// Create queue` ` ` `queue<Node> q;` ` ` `// Initially queue is empty` ` ` `Node temp = Node{ 0, 0, ` `""` `};` ` ` `// Initialize visited to 1` ` ` `visited[0][0] = 1;` ` ` `// Push temp in queue` ` ` `q.push(temp);` ` ` `// While queue is not empty` ` ` `while` `(!q.empty()) {` ` ` `// Get the front of the queue and pop it` ` ` `Node u = q.front();` ` ` `q.pop();` ` ` `// If popped element is the required number` ` ` `if` `(u.a == 0 && u.b == b)` ` ` `// Parse int from string and return it` ` ` `return` `std::stoi(u.str);` ` ` `// Loop for each digit and check the sum` ` ` `// If not visited then push it to the queue` ` ` `for` `(` `int` `i = 0; i < 10; i++) {` ` ` `int` `dd = (u.a * 10 + i) % a;` ` ` `int` `ss = u.b + i;` ` ` `if` `(ss <= b && !visited[dd][ss]) {` ` ` `visited[dd][ss] = 1;` ` ` `q.push(Node{ dd, ss, u.str + ` `char` `(` `'0'` `+ i) });` ` ` `}` ` ` `}` ` ` `}` ` ` `// Required number not found return -1.` ` ` `return` `-1;` `}` `// Driver code.` `int` `main()` `{` ` ` `int` `a = 25, b = 1;` ` ` `cout << findNumber(a, b);` ` ` `return` `0;` `}` |

## Java

`// Java implementation of the approach` `import` `java.util.*;` `class` `Solution` `{` ` ` `// Array that stores visited digits` `static` `int` `visited[][]= ` `new` `int` `[` `501` `][` `5001` `];` ` ` `// Structure for queue Node.` `static` `class` `Node {` ` ` `int` `a, b;` ` ` `String str;` ` ` `Node(` `int` `a1,` `int` `b1,String s)` ` ` `{` ` ` `a=a1;` ` ` `b=b1;` ` ` `str=s;` ` ` `}` `}` ` ` `// Function to return the minimum number such that it is` `// divisible by 'a' and sum of its digits is equals to 'b'` `static` `int` `findNumber(` `int` `a, ` `int` `b)` `{` ` ` `// Create queue` ` ` `Queue<Node> q= ` `new` `LinkedList<Node>();` ` ` ` ` `// Initially queue is empty` ` ` `Node temp =` `new` `Node( ` `0` `, ` `0` `, ` `""` `);` ` ` ` ` `// Initialize visited to 1` ` ` `visited[` `0` `][` `0` `] = ` `1` `;` ` ` ` ` `// Push temp in queue` ` ` `q.add(temp);` ` ` ` ` `// While queue is not empty` ` ` `while` `(q.size()!=` `0` `) {` ` ` ` ` `// Get the front of the queue and pop it` ` ` `Node u = q.peek();` ` ` `q.remove();` ` ` ` ` `// If popped element is the required number` ` ` `if` `(u.a == ` `0` `&& u.b == b)` ` ` ` ` `// Parse int from string and return it` ` ` `return` `Integer.parseInt(u.str);` ` ` ` ` `// Loop for each digit and check the sum` ` ` `// If not visited then push it to the queue` ` ` `for` `(` `int` `i = ` `0` `; i < ` `10` `; i++) {` ` ` `int` `dd = (u.a * ` `10` `+ i) % a;` ` ` `int` `ss = u.b + i;` ` ` `if` `(ss <= b && visited[dd][ss]==` `0` `) {` ` ` `visited[dd][ss] = ` `1` `;` ` ` `q.add(` `new` `Node( dd, ss, u.str + (` `char` `)(` `'0'` `+ i) ));` ` ` `}` ` ` `}` ` ` `}` ` ` ` ` `// Required number not found return -1.` ` ` `return` `-` `1` `;` `}` ` ` `// Driver code.` `public` `static` `void` `main(String args[])` `{` ` ` `//initialize visited` ` ` `for` `(` `int` `i=` `0` `;i<` `500` `;i++)` ` ` `for` `(` `int` `j=` `0` `;j<` `500` `;j++)` ` ` `visited[i][j]=` `0` `;` ` ` ` ` `int` `a = ` `25` `, b = ` `1` `;` ` ` `System.out.println(findNumber(a, b));` ` ` `}` `}` `//contributed by Arnab Kundu` |

## Python3

`# Python3 implementation of the approach` `# Array that stores visited digits` `visited ` `=` `[[` `0` `for` `x ` `in` `range` `(` `501` `)]` ` ` `for` `y ` `in` `range` `(` `5001` `)]` `# Structure for queue Node.` `class` `Node:` ` ` ` ` `def` `__init__(` `self` `, a, b, string):` ` ` `self` `.a ` `=` `a` ` ` `self` `.b ` `=` `b` ` ` `self` `.string ` `=` `string` `# Function to return the minimum number` `# such that it is divisible by 'a' and` `# sum of its digits is equals to 'b'` `def` `findNumber(a, b):` ` ` `# Use list as queue` ` ` `q ` `=` `[]` ` ` `# Initially queue is empty` ` ` `temp ` `=` `Node(` `0` `, ` `0` `, "")` ` ` `# Initialize visited to 1` ` ` `visited[` `0` `][` `0` `] ` `=` `1` ` ` `# Push temp in queue` ` ` `q.append(temp)` ` ` `# While queue is not empty` ` ` `while` `len` `(q) > ` `0` `:` ` ` `# Get the front of the queue` ` ` `# and pop it` ` ` `u ` `=` `q.pop(` `0` `)` ` ` `# If popped element is the` ` ` `# required number` ` ` `if` `u.a ` `=` `=` `0` `and` `u.b ` `=` `=` `b:` ` ` `# Parse int from string` ` ` `# and return it` ` ` `return` `int` `(u.string)` ` ` `# Loop for each digit and check the sum` ` ` `# If not visited then push it to the queue` ` ` `for` `i ` `in` `range` `(` `0` `, ` `10` `):` ` ` `dd ` `=` `(u.a ` `*` `10` `+` `i) ` `%` `a` ` ` `ss ` `=` `u.b ` `+` `i` ` ` ` ` `if` `ss <` `=` `b ` `and` `visited[dd][ss] ` `=` `=` `False` `:` ` ` `visited[dd][ss] ` `=` `1` ` ` `q.append(Node(dd, ss, u.string ` `+` `str` `(i)))` ` ` `# Required number not found return -1.` ` ` `return` `-` `1` `# Driver code.` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `a, b ` `=` `25` `, ` `1` ` ` `print` `(findNumber(a, b))` ` ` `# This code is contributed by Rituraj Jain` |

**Output:**

100

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. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.