给定x,y,z和n,找到可被x,y和z整除的最小n位数字。
例子:
Input : x = 2, y = 3, z = 5
n = 4
Output : 1020
Input : x = 3, y = 5, z = 7
n = 2
Output : Not possible
1)找到最小的n位数字是pow(10,n-1)。
2)查找给定3个数字x,y和z的LCM。
3)除以pow(10,n-1)时,求出LCM的余数。
4)将“ LCM-余数”添加到pow(10,n-1)。如果此加法仍然是数字,我们将返回结果。否则我们返回不可能。
插图 :
假设n = 4,x,y,z分别为2、3、5。
1)首先找到至少四位数,即1000,
2)LCM为2、3、5,因此LCM为30。
3)找到1000%30 = 10的提醒
4)从LCM中减去余数,即30 – 10 =20。结果是1000 + 20 = 1020。
下面是上述方法的实现:
C++
// C++ program to find smallest n digit number
// which is divisible by x, y and z.
#include
using namespace std;
// LCM for x, y, z
int LCM(int x, int y, int z)
{
int ans = ((x * y) / (__gcd(x, y)));
return ((z * ans) / (__gcd(ans, z)));
}
// returns smallest n digit number divisible
// by x, y and z
int findDivisible(int n, int x, int y, int z)
{
// find the LCM
int lcm = LCM(x, y, z);
// find power of 10 for least number
int ndigitnumber = pow(10, n-1);
// reminder after
int reminder = ndigitnumber % lcm;
// If smallest number itself divides
// lcm.
if (reminder == 0)
return ndigitnumber;
// add lcm- reminder number for
// next n digit number
ndigitnumber += lcm - reminder;
// this condition check the n digit
// number is possible or not
// if it is possible it return
// the number else return 0
if (ndigitnumber < pow(10, n))
return ndigitnumber;
else
return 0;
}
// driver code
int main()
{
int n = 4, x = 2, y = 3, z = 5;
int res = findDivisible(n, x, y, z);
// if number is possible then
// it print the number
if (res != 0)
cout << res;
else
cout << "Not possible";
return 0;
}
Java
// Java program to find smallest n digit number
// which is divisible by x, y and z.
import java.io.*;
public class GFG {
static int __gcd(int a, int b)
{
if (b == 0) {
return a;
}
else {
return __gcd(b, a % b);
}
}
// LCM for x, y, z
static int LCM(int x, int y, int z)
{
int ans = ((x * y) / (__gcd(x, y)));
return ((z * ans) / (__gcd(ans, z)));
}
// returns smallest n digit number
// divisible by x, y and z
static int findDivisible(int n, int x,
int y, int z)
{
// find the LCM
int lcm = LCM(x, y, z);
// find power of 10 for least number
int ndigitnumber = (int)Math.pow(10, n - 1);
// reminder after
int reminder = ndigitnumber % lcm;
// If smallest number itself divides
// lcm.
if (reminder == 0)
return ndigitnumber;
// add lcm- reminder number for
// next n digit number
ndigitnumber += lcm - reminder;
// this condition check the n digit
// number is possible or not
// if it is possible it return
// the number else return 0
if (ndigitnumber < Math.pow(10, n))
return ndigitnumber;
else
return 0;
}
// driver code
static public void main(String[] args)
{
int n = 4, x = 2, y = 3, z = 5;
int res = findDivisible(n, x, y, z);
// if number is possible then
// it print the number
if (res != 0)
System.out.println(res);
else
System.out.println("Not possible");
}
}
// This code is contributed by vt_m.
Python3
# Python3 code to find smallest n digit
# number which is divisible by x, y and z.
from fractions import gcd
import math
# LCM for x, y, z
def LCM( x , y , z ):
ans = int((x * y) / (gcd(x, y)))
return int((z * ans) / (gcd(ans, z)))
# returns smallest n digit number
# divisible by x, y and z
def findDivisible (n, x, y, z):
# find the LCM
lcm = LCM(x, y, z)
# find power of 10 for least number
ndigitnumber = math.pow(10, n-1)
# reminder after
reminder = ndigitnumber % lcm
# If smallest number itself
# divides lcm.
if reminder == 0:
return ndigitnumber
# add lcm- reminder number for
# next n digit number
ndigitnumber += lcm - reminder
# this condition check the n digit
# number is possible or not
# if it is possible it return
# the number else return 0
if ndigitnumber < math.pow(10, n):
return int(ndigitnumber)
else:
return 0
# driver code
n = 4
x = 2
y = 3
z = 5
res = findDivisible(n, x, y, z)
# if number is possible then
# it print the number
if res != 0:
print( res)
else:
print("Not possible")
# This code is contributed by "Sharad_Bhardwaj".
C#
// C# program to find smallest n digit number
// which is divisible by x, y and z.
using System;
public class GFG
{
static int __gcd(int a, int b)
{
if(b == 0)
{
return a;
}
else
{
return __gcd(b, a % b);
}
}
// LCM for x, y, z
static int LCM(int x, int y, int z)
{
int ans = ((x * y) / (__gcd(x, y)));
return ((z * ans) / (__gcd(ans, z)));
}
// returns smallest n digit number divisible
// by x, y and z
static int findDivisible(int n, int x, int y, int z)
{
// find the LCM
int lcm = LCM(x, y, z);
// find power of 10 for least number
int ndigitnumber =(int)Math. Pow(10, n - 1);
// reminder after
int reminder = ndigitnumber % lcm;
// If smallest number itself divides
// lcm.
if (reminder == 0)
return ndigitnumber;
// add lcm- reminder number for
// next n digit number
ndigitnumber += lcm - reminder;
// this condition check the n digit
// number is possible or not
// if it is possible it return
// the number else return 0
if (ndigitnumber < Math.Pow(10, n))
return ndigitnumber;
else
return 0;
}
// Driver code
static public void Main ()
{
int n = 4, x = 2, y = 3, z = 5;
int res = findDivisible(n, x, y, z);
// if number is possible then
// it print the number
if (res != 0)
Console.WriteLine(res);
else
Console.WriteLine("Not possible");
}
}
// This code is contributed by vt_m.
PHP
Javascript
输出:
1020