Given two numbers n and x, we need to calculate the smallest value of x that is closest to given number n.
Examples:
Input : n = 9, x = 4 Output : 8 Input : n = 2855, x = 13 Output : 2860 Input : n = 46426171, x = 43 Output : 46426154 Input : n = 1, x = 3 Output : 3
We need to find a k such that x*k is closest to n. If we do k = n/x, we get a value of k that may not lead to maximum. We can get closest by comparing the values floor(n/x) * x and ceil(n/x) * x.
Below is an interesting solution that doesn’t require computations of floor(n/x) and ceil(n/x). The idea is to do following two steps.
n = n + x/2; n = n - (n%x); result = n
Let us consider below example
n = 2855 x = 13 n = 2855 + 13/2 = 2861 n = 2861 - (2861 % 13) = 2861 - 1 = 2860
Below are implementations of above steps.
// CPP program to calculate the smallest multiple // of x closest to a given number #include <bits/stdc++.h> using namespace std;
// Function to calculate the smallest multiple int closestMultiple( int n, int x)
{ if (x>n)
return x;
n = n + x/2;
n = n - (n%x);
return n;
} // driver program int main()
{ int n = 9, x = 4;
printf ( "%d" , closestMultiple(n, x));
return 0;
} |
// Java program to calculate the smallest // multiple of x closest to a given number import java.io.*;
class Solution
{ // Function to calculate the smallest multiple
static int closestMultiple( int n, int x)
{
if (x>n)
return x;
n = n + x/ 2 ;
n = n - (n%x);
return n;
}
// driver program
public static void main (String[] args)
{
int n = 56287 , x = 27 ;
System.out.println(closestMultiple(n, x));
}
} |
# Python3 program to calculate # the smallest multiple of x # closest to a given number # Function to calculate # the smallest multiple def closestMultiple(n, x):
if x > n:
return x;
z = ( int )(x / 2 );
n = n + z;
n = n - (n % x);
return n;
# Driver Code n = 56287 ;
x = 27 ;
print (closestMultiple(n, x));
# This code is contributed # by mits |
// C# program to calculate smallest // multiple of x closest to a // given number using System;
class Solution {
// Function to calculate the
// smallest multiple
static int closestMultiple( int n, int x)
{
if (x > n)
return x;
n = n + x / 2;
n = n - (n % x);
return n;
}
// Driver program
public static void Main()
{
int n = 56287, x = 27;
Console.WriteLine(closestMultiple(n, x));
}
} // This code is contributed by Anant Agarwal. |
<?php // PHP program to calculate // the smallest multiple // of x closest to a // given number // Function to calculate // the smallest multiple function closestMultiple( $n , $x )
{ if ( $x > $n )
return $x ;
$n = $n + $x / 2;
$n = $n - ( $n % $x );
return $n ;
} // Driver Code
$n = 9;
$x = 4;
echo closestMultiple( $n , $x );
// This code is contributed by ajit ?> |
<script> // Javascript program to calculate smallest
// multiple of x closest to a
// given number
// Function to calculate the
// smallest multiple
function closestMultiple(n, x)
{
if (x > n)
return x;
n = n + parseInt(x / 2, 10);
n = n - (n % x);
return n;
}
let n = 56287, x = 27;
document.write(closestMultiple(n, x));
// This code is contributed by rameshtravel07.
</script> |
8
Time Complexity: O(1)
As we are performing only constant time operations.
Auxiliary Space: O(1)
As constant extra space is used.