# 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.

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.