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

• Difficulty Level : Expert
• Last Updated : 13 Apr, 2021

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

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

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`

## Javascript

 ``

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.