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.
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 <bits/stdc++.h> 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
<?php // PHP Program to find closest // multiple of x to a^b // function to find // closest multiple // of x to a^b function multiple( $a , $b , $x ) { if ( $b < 0) { if ( $a == 1 && $x == 1) echo "1" ; else echo "0" ; } // calculate a ^ b / x $mul = pow( $a , $b ); $ans = $mul / $x ; // Answer is either // (ans * x) or // (ans + 1) * x $ans1 = $x * $ans ; $ans2 = $x * ( $ans + 1); $k = ((( $mul - $ans1 ) <= ( $ans2 - $mul )) ? $ans1 : $ans2 ); echo ( $k ); } // Driver Code $a = 348; $b = 1; $x = 4; multiple( $a , $b , $x ); // This code is contributed by ajit ?> |
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
<script> // javascript Program to find closest // multiple of x to a^bpublic // function to find closest // multiple of x to a^b function multiple(a , b , x) { if (b < 0) { if (a == 1 && x == 1) document.write( "1" ); else document.write( "0" ); } // calculate a ^ b / x var mul = parseInt( Math.pow(a, b)); var ans = mul / x; // Answer is either (ans * x) or // (ans + 1) * x var ans1 = x * ans; var ans2 = x * (ans + 1); // Printing nearest answer document.write(((mul - ans1) <= (ans2 - mul)) ? ans1 : ans2); } // Driver Program var a = 349, b = 1, x = 4; multiple(a, b, x); // This code is contributed by gauravrajput1 </script> |
Output:
348
Time Complexity: O(log b), to find power
Auxiliary Space: O(1),as no extra space is required
This article is contributed by Rohit Thapliyal. If you like neveropen and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the neveropen main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!