可被给定三个数整除的最小n位数

给定x,y,z和n,求出可被x,y和z整除的最小n位数。

null

例如:

Input : x = 2, y = 3, z = 5        n = 4Output : 1020Input : x = 3, y = 5, z = 7        n = 2Output : 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位数,我们将返回结果。否则我们就不可能回来了。

插图: 假设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 <bits/stdc++.h>
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

<?php
// php program to find smallest n digit number
// which is divisible by x, y and z.
// gcd function
function gcd( $a , $b ) {
return ( $a % $b ) ? gcd( $b , $a % $b ) : $b ;
}
// LCM for x, y, z
function LCM( $x , $y , $z )
{
$ans = floor (( $x * $y ) / (gcd( $x , $y )));
return floor (( $z * $ans ) / (gcd( $ans , $z )));
}
// returns smallest n digit number divisible
// by x, y and z
function findDivisible( $n , $x , $y , $z )
{
// find the LCM
$lcm = LCM( $x , $y , $z );
// find power of 10 for least number
$ndigitnumber = 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 < pow(10, $n ))
return $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)
echo $res ;
else
echo "Not possible" ;
// This code is contributed by mits.
?>


Javascript

<script>
// JavaScript program to find smallest n digit number
// which is divisible by x, y and z.
function __gcd(a, b)
{
if (b == 0)
{
return a;
}
else
{
return __gcd(b, a % b);
}
}
// LCM for x, y, z
function LCM(x, y, z)
{
let ans = ((x * y) / (__gcd(x, y)));
return ((z * ans) / (__gcd(ans, z)));
}
// returns smallest n digit number divisible
// by x, y and z
function findDivisible(n, x, y, z)
{
// find the LCM
let lcm = LCM(x, y, z);
// find power of 10 for least number
let ndigitnumber = Math.pow(10, n - 1);
// reminder after
let 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
let n = 4, x = 2, y = 3, z = 5;
let res = findDivisible(n, x, y, z);
// if number is possible then
// it print the number
if (res != 0)
document.write(res);
else
document.write( "Not possible" );
// This code is contributed by chinmoy1997pal.
</script>


输出:

1020

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享