给定正整数N ,任务是找到大于或等于X的最小整数,其所有数字均可被N的非零数字整除。
例子:
Input: N = 280
Output: 280
Explanation:
280 is the smallest which is divisible by the digits 8 and 2.
Input: N = 32
Output: 36
Explanation:
36 is the smallest number which is divisible by both the digits 2 and 3.
方法:想法是找到X的所有非零数字的LCM,然后只找到该LCM值的下一个更大的倍数,即N。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include "bits/stdc++.h"
using namespace std;
// Function to calculate the LCM
int LCM(int A, int B)
{
return (A * B / __gcd(A, B));
}
// Function to find the smallest number
// satisfying given constraints
int findSmallestNumber(int X)
{
// LCM value is 1 initially
int lcm = 1;
int temp = X;
// Finding the LCM of all
// non zero digits
while (temp) {
int last = temp % 10;
temp /= 10;
if (!last)
continue;
// Update the value lcm
lcm = LCM(lcm, last);
}
// Stores ceil value
int answer = ((X + lcm - 1) / lcm)
* lcm;
// Print the answer
cout << answer;
}
// Driver Code
int main()
{
int X = 280;
// Function Call
findSmallestNumber(X);
return 0;
}
Java
// Java program for the above approach
class GFG{
// Function to calculate the LCM
static int LCM(int A, int B)
{
return (A * B / __gcd(A, B));
}
// Function to find the smallest number
// satisfying given constraints
static void findSmallestNumber(int X)
{
// LCM value is 1 initially
int lcm = 1;
int temp = X;
// Finding the LCM of all
// non zero digits
while (temp > 0)
{
int last = temp % 10;
temp /= 10;
if (last == 0)
continue;
// Update the value lcm
lcm = LCM(lcm, last);
}
// Stores ceil value
int answer = ((X + lcm - 1) / lcm)
* lcm;
// Print the answer
System.out.print(answer);
}
static int __gcd(int a, int b)
{
return b == 0 ? a:__gcd(b, a % b);
}
// Driver Code
public static void main(String[] args)
{
int X = 280;
// Function Call
findSmallestNumber(X);
}
}
// This code is contributed by shikhasingrajput
Python3
# Python3 program for the above approach
import math
# Function to calculate the LCM
def LCM(A, B):
return (A * B // math.gcd(A, B))
# Function to find the smallest number
# satisfying given constraints
def findSmallestNumber(X):
# LCM value is 1 initially
lcm = 1
temp = X
# Finding the LCM of all
# non zero digits
while (temp):
last = temp % 10
temp //= 10
if (not last):
continue
# Update the value lcm
lcm = LCM(lcm, last)
# Stores ceil value
answer = ((X + lcm - 1) // lcm) * lcm
# Print the answer
print(answer)
# Driver Code
if __name__ == "__main__":
X = 280
# Function Call
findSmallestNumber(X)
# This code is contributed by chitranayal
C#
// C# program for the above approach
using System;
class GFG{
// Function to calculate the LCM
static int LCM(int A, int B)
{
return (A * B / __gcd(A, B));
}
// Function to find the smallest number
// satisfying given constraints
static void findSmallestNumber(int X)
{
// LCM value is 1 initially
int lcm = 1;
int temp = X;
// Finding the LCM of all
// non zero digits
while (temp > 0)
{
int last = temp % 10;
temp /= 10;
if (last == 0)
continue;
// Update the value lcm
lcm = LCM(lcm, last);
}
// Stores ceil value
int answer = ((X + lcm - 1) / lcm)
* lcm;
// Print the answer
Console.Write(answer);
}
static int __gcd(int a, int b)
{
return b == 0 ? a:__gcd(b, a % b);
}
// Driver Code
public static void Main(String[] args)
{
int X = 280;
// Function Call
findSmallestNumber(X);
}
}
// This code is contributed by shikhasingrajput
输出:
280
时间复杂度: O(N * log 10 N)
辅助空间: O(1)