Open In App

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

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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

 



Last Updated : 23 Jun, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads