Find the multiple of x which is closest to a^b (original) (raw)
Last Updated : 29 Dec, 2022
Given three integers a, b, and x, the task is to get the multiple of x which is closest to ab.
Examples:
Input: a = 5, b = 4, x = 3
Output: 624
54 = 625 and 624 is the multiple of 3 which is closest to 625Input: a = 349, b = 1, x = 4
Output: 348
Approach:
- Calculate ab and store it in a variable say num.
- Then, calculate ?num / x? and store it in a variable floor.
- Now the closest element at the left will be closestLeft = x * floor.
- And the closest element on the right will be closestRight = x * (floor + 1).
- Finally, the closest number among them will be min(num - closestLeft, closestRight - num).
Below is the implementation of the above approach:
C++ `
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; #define ll long long int
// Function to return the multiple of x // which is closest to a^b ll getClosest(int a, int b, int x) { ll num = pow(a, b);
int floor = num / x;
// Closest element on the left
ll numOnLeft = x * floor;
// Closest element on the right
ll numOnRight = x * (floor + 1);
// If numOnLeft is closer than numOnRight
if ((num - numOnLeft) < (numOnRight - num))
return numOnLeft;
// If numOnRight is the closest
else
return numOnRight;}
// Driver code int main() { int a = 349, b = 1, x = 4; cout << getClosest(a, b, x) << endl; return 0; }
Java
//Java implementation of the approach
public class GFG {
// Function to return the multiple of x // which is closest to a^b static long getClosest(int a, int b, int x) { long num = (long) Math.pow(a, b);
int floor = (int) (num / x);
// Closest element on the left
long numOnLeft = x * floor;
// Closest element on the right
long numOnRight = x * (floor + 1);
// If numOnLeft is closer than numOnRight
if ((num - numOnLeft) < (numOnRight - num)) {
return numOnLeft;
} // If numOnRight is the closest
else {
return numOnRight;
}
}
public static void main(String[] args) {
int a = 349, b = 1, x = 4;
System.out.println(getClosest(a, b, x));
}}
Python3
Python3 implementation of the approach
Function to return the multiple of x
which is closest to a^b
def getClosest(a, b, x) : num = pow(a, b)
floor = num // x
# Closest element on the left
numOnLeft = x * floor
# Closest element on the right
numOnRight = x * (floor + 1)
# If numOnLeft is closer than numOnRight
if ((num - numOnLeft) <
(numOnRight - num)):
return numOnLeft
# If numOnRight is the closest
else :
return numOnRightDriver code
if name == "main" :
a, b, x = 349, 1, 4
print(getClosest(a, b, x))This code is contributed by Ryuga
C#
// C# implementation of the approach using System;
// #define ll long long int
class GFG { // Function to return the multiple of x // which is closest to a^b static long getClosest(int a, int b, int x) { int num = (int)Math.Pow(a, b);
int floor = (int)(num / x);
// Closest element on the left
int numOnLeft = (int)(x * floor);
// Closest element on the right
int numOnRight = (int)(x * (floor + 1));
// If numOnLeft is closer than numOnRight
if ((num - numOnLeft) < (numOnRight - num))
return numOnLeft;
// If numOnRight is the closest
else
return numOnRight;}
// Driver code public static void Main() { int a = 349, b = 1, x = 4; Console.WriteLine(getClosest(a, b, x)); } }
// This code is contributed // by Akanksha Rai
PHP
JavaScript
`
Time Complexity: O(log(b))
Auxiliary Space: O(1)