📌  相关文章
📜  最小的n位数字可被给定的三个数整除

📅  最后修改于: 2021-05-06 07:40:44             🧑  作者: Mango

给定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