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 625

Input: a = 349, b = 1, x = 4
Output: 348

Approach:

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 numOnRight

Driver 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

b,b, b,x) { num=pow(num = pow(num=pow(a, $b); floor=(int)(floor = (int)(floor=(int)(num / $x); // Closest element on the left numOnLeft=numOnLeft = numOnLeft=x * $floor; // Closest element on the right numOnRight=numOnRight = numOnRight=x * ($floor + 1); // If numOnLeft is closer than numOnRight if (($num - $numOnLeft) < ($numOnRight - $num)) return $numOnLeft; // If numOnRight is the closest else return ceil($numOnRight); } // Driver code $a = 349; $b = 1; $x = 4; echo getClosest($a, b,b, b,x); // This code is contributed by jit_t ?>

JavaScript

`

Time Complexity: O(log(b))
Auxiliary Space: O(1)