# Find multiple of x closest to or a ^ b (a raised to power b)

We are given 3 numbers a, b and x. We need to output the multiple of x which is closest to a^b.
Note : b can be a negative number

Examples :

```Input : x = 2, a = 4, b = -2
Output : 0
Explanation : a^b = 1/16.
Closest multiple of 2 to 1/16 is 0.

Input : x = 4, a = 349, b = 1
Output : 348
Explanation :a^b = 349
The closest multiple of 4 to 349 is 348.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Observations :

```1. When b is negative and a is 1, then a ^ b turns out
to be 1 and hence, closest multiple of x becomes either
x * 0 or x * 1.

2. When b is negative and a is more than 1, then a ^ b
turns out to be less than 1 and hence closest multiple
of x becomes 0.

3. When b is positive, calculate a ^ b, then let
mul = Integer (a^b / x), then closest multiple of x is
mul * x or (mul + 1) * x.
```

## C++

 `// C++ Program to find closest ` `// multiple of x to a^b ` `#include ` `using` `namespace` `std; ` ` `  `// function to find closest multiple   ` `// of x to a^b  ` `void` `multiple(``int` `a, ``int` `b, ``int` `x) ` `{     ` `    ``if` `(b < 0) { ` `        ``if` `(a == 1 && x == 1) ` `            ``cout << ``"1"``; ` ` `  `        ``else` `            ``cout << ``"0"``; ` `    ``} ` ` `  `    ``// calculate a ^ b / x ` `    ``int` `mul = ``pow``(a, b); ` `     `  `    ``int` `ans = mul / x;  ` `     `  `    ``// Answer is either (ans * x) or  ` `    ``// (ans + 1) * x  ` `    ``int` `ans1 = x * ans; ` `    ``int` `ans2 = x * (ans + 1); ` ` `  `    ``// Printing nearest answer ` `    ``cout << (((mul - ans1) <= (ans2 - mul)) ? ` `                                ``ans1 : ans2); ` `} ` ` `  `// Driver Program ` `int` `main() ` `{ ` `    ``int` `a = 349, b = 1, x = 4; ` ` `  `    ``multiple(a, b, x); ` `    ``return` `0; ` `} `

## Java

 `// java Program to find closest ` `// multiple of x to a^b ` `import` `java.io.*; ` ` `  `public` `class` `GFG { ` ` `  `    ``// function to find closest ` `    ``// multiple of x to a^b  ` `    ``static` `void` `multiple(``int` `a, ``int` `b, ``int` `x) ` `    ``{  ` `        ``if` `(b < ``0``) ` `        ``{ ` `            ``if` `(a == ``1` `&& x == ``1``) ` `                ``System.out.println(``"1"``); ` `            ``else` `                ``System.out.println(``"0"``); ` `        ``} ` `     `  `        ``// calculate a ^ b / x ` `        ``int` `mul = (``int``)Math.pow(a, b); ` `         `  `        ``int` `ans = mul / x;  ` `         `  `        ``// Answer is either (ans * x) or  ` `        ``// (ans + 1) * x  ` `        ``int` `ans1 = x * ans; ` `        ``int` `ans2 = x * (ans + ``1``); ` `     `  `        ``// Printing nearest answer ` `        ``System.out.println(((mul - ans1) ` `                        ``<= (ans2 - mul)) ` `                         ``? ans1 : ans2); ` `    ``} ` `     `  `    ``// Driver Program ` `    ``static` `public` `void` `main (String[] args) ` `    ``{ ` `        ``int` `a = ``349``, b = ``1``, x = ``4``; ` ` `  `        ``multiple(a, b, x); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m.  `

## C#

 `// C# Program to find closest ` `// multiple of x to a^b ` `using` `System; ` ` `  `public` `class` `GFG { ` `         `  `    ``// function to find closest multiple  ` `    ``// of x to a^b  ` `    ``static` `void` `multiple(``int` `a, ``int` `b, ``int` `x) ` `    ``{  ` `        ``if` `(b < 0) { ` `            ``if` `(a == 1 && x == 1) ` `                ``Console.WriteLine(``"1"``); ` `     `  `            ``else` `                ``Console.WriteLine(``"0"``); ` `        ``} ` `     `  `        ``// calculate a ^ b / x ` `        ``int` `mul = (``int``)Math.Pow(a, b); ` `         `  `        ``int` `ans = mul / x;  ` `         `  `        ``// Answer is either (ans * x) or  ` `        ``// (ans + 1) * x  ` `        ``int` `ans1 = x * ans; ` `        ``int` `ans2 = x * (ans + 1); ` `     `  `        ``// Printing nearest answer ` `        ``Console.WriteLine(((mul - ans1)  ` `                       ``<= (ans2 - mul))  ` `                         ``? ans1 : ans2); ` `    ``} ` `     `  `    ``// Driver Program ` `    ``static` `public` `void` `Main () ` `    ``{ ` `        ``int` `a = 349, b = 1, x = 4; ` ` `  `        ``multiple(a, b, x); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m. `

## PHP

 ` `

## Python3

 `# Python3 Program to  ` `# find closest multiple  ` `# of x to a^b ` `import` `math ` ` `  `# function to find closest  ` `# multiple of x to a^b  ` `def` `multiple(a, b, x): ` `    ``if` `(b < ``0``): ` `        ``if` `(a ``=``=` `1` `and` `x ``=``=` `1``): ` `            ``print``(``"1"``); ` `        ``else``: ` `            ``print``(``"0"``); ` `             `  `    ``# calculate a ^ b / x ` `    ``mul ``=` `int``(``pow``(a, b)); ` `     `  `    ``ans ``=` `int``(mul ``/` `x); ` `     `  `    ``# Answer is either (ans * x)  ` `    ``# or (ans + 1) * x  ` `    ``ans1 ``=` `x ``*` `ans; ` `    ``ans2 ``=` `x ``*` `(ans ``+` `1``); ` `     `  `    ``# Printing nearest answer ` `    ``if` `((mul ``-` `ans1) <``=` `(ans2 ``-` `mul)): ` `        ``print``(ans1); ` `    ``else``:  ` `        ``print``(ans2); ` ` `  `# Driver Code ` `a ``=` `349``; ` `b ``=` `1``; ` `x ``=` `4``; ` `multiple(a, b, x); ` ` `  `# This code is contributed  ` `# by mits `

Output:

```348
```

This article is contributed by Rohit Thapliyal. 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.

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.

My Personal Notes arrow_drop_up

Improved By : vt_m, jit_t, Mithun Kumar

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.