¡Encuentra el número X más pequeño tal que X! contiene al menos Y ceros finales.

Dado un entero Y, encuentre el número X más pequeño tal que X! contiene al menos Y ceros finales. 
Requisitos previos: cuente los ceros finales en el factorial de un número

Ejemplos: 

Entrada: Y = 2 
Salida: 10 
10! = 3628800, que tiene 2 ceros finales. 9! = 362880, que tiene 1 cero final. Por lo tanto, 10 es la respuesta correcta.

Entrada: Y = 6 
Salida: 25 
25! = 15511210043330985984000000, que tiene 6 ceros al final. 24! = 620448401733239439360000, que tiene 4 ceros al final. Por lo tanto, 25 es la respuesta correcta. 
 

Enfoque: el problema se puede resolver fácilmente utilizando la búsqueda binaria . El número de ceros finales en N! está dado por el conteo de los factores 5 en N!. Lea este artículo para conocer los requisitos previos. ¡La función countFactor(5, N) devuelve el recuento del factor 5 en N! que es igual al recuento de ceros finales en N!. El número X más pequeño tal que X! contiene al menos Y ceros finales se puede calcular rápidamente usando la búsqueda binaria en un rango [0, 5 * Y] usando esta función.

A continuación se muestra la implementación del enfoque anterior.  

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to count the number
// of factors P in X!
int countFactor(int P, int X)
{
    if (X < P)
        return 0;
 
    return (X / P + countFactor(P, X / P));
}
 
// Function to find the smallest X such
// that X! contains Y trailing zeros
int findSmallestX(int Y)
{
    int low = 0, high = 5 * Y;
    int N = 0;
    while (low <= high) {
        int mid = (high + low) / 2;
 
        if (countFactor(5, mid) < Y) {
            low = mid + 1;
        }
 
        else {
            N = mid;
            high = mid - 1;
        }
    }
 
    return N;
}
 
// Driver code
int main()
{
    int Y = 10;
 
    cout << findSmallestX(Y);
 
    return 0;
}

Java

// Java implementation of the above approach
class GFG
{
     
    // Function to count the number
    // of factors P in X!
    static int countFactor(int P, int X)
    {
        if (X < P)
            return 0;
     
        return (X / P + countFactor(P, X / P));
    }
     
    // Function to find the smallest X such
    // that X! contains Y trailing zeros
    static int findSmallestX(int Y)
    {
        int low = 0, high = 5 * Y;
        int N = 0;
        while (low <= high)
        {
            int mid = (high + low) / 2;
     
            if (countFactor(5, mid) < Y)
            {
                low = mid + 1;
            }
     
            else
            {
                N = mid;
                high = mid - 1;
            }
        }
     
        return N;
    }
     
    // Driver code
    public static void main(String args[])
    {
        int Y = 10;
     
        System.out.println(findSmallestX(Y));
    }
}
 
// This code is contributed by Ryuga

Python3

# Python3 implementation of the approach
 
# Function to count the number
# of factors P in X!
def countFactor(P, X):
    if (X < P):
        return 0;
 
    return (X // P + countFactor(P, X // P));
 
# Function to find the smallest X such
# that X! contains Y trailing zeros
def findSmallestX(Y):
 
    low = 0;
    high = 5 * Y;
    N = 0;
    while (low <= high):
        mid = (high + low) // 2;
 
        if (countFactor(5, mid) < Y):
            low = mid + 1;
 
        else:
            N = mid;
            high = mid - 1;
 
    return N;
 
# Driver code
Y = 10;
 
print(findSmallestX(Y));
 
# This code is contributed by mits

C#

// C# implementation of the approach
class GFG
{
     
// Function to count the number
// of factors P in X!
static int countFactor(int P, int X)
{
    if (X < P)
        return 0;
 
    return (X / P + countFactor(P, X / P));
}
 
// Function to find the smallest X such
// that X! contains Y trailing zeros
static int findSmallestX(int Y)
{
    int low = 0, high = 5 * Y;
    int N = 0;
    while (low <= high)
    {
        int mid = (high + low) / 2;
 
        if (countFactor(5, mid) < Y)
        {
            low = mid + 1;
        }
 
        else
        {
            N = mid;
            high = mid - 1;
        }
    }
 
    return N;
}
 
// Driver code
static void Main()
{
    int Y = 10;
 
    System.Console.WriteLine(findSmallestX(Y));
}
}
 
// This code is contributed by mits

PHP

<?php
// PHP implementation of the above approach
 
// Function to count the number
// of factors P in X!
function countFactor($P, $X)
{
    if ($X < $P)
        return 0;
 
    return ((int)($X / $P) +
             countFactor($P, ($X / $P)));
}
 
// Function to find the smallest X such
// that X! contains Y trailing zeros
function findSmallestX($Y)
{
    $low = 0; $high = 5 * $Y;
    $N = 0;
    while ($low <= $high)
    {
        $mid = (int)(($high + $low) / 2);
 
        if (countFactor(5, $mid) < $Y)
        {
            $low = $mid + 1;
        }
 
        else
        {
            $N = $mid;
            $high = $mid - 1;
        }
    }
 
    return $N;
}
 
// Driver code
$Y = 10;
 
echo(findSmallestX($Y));
 
// This code is contributed by Code_Mech.
?>

Javascript

<script>
 
// Javascript implementation of the approach
 
// Function to count the number
// of factors P in X!
function countFactor(P, X)
{
    if (X < P)
        return 0;
 
    return (parseInt(X / P) +
    countFactor(P, parseInt(X / P)));
}
 
// Function to find the smallest X such
// that X! contains Y trailing zeros
function findSmallestX(Y)
{
    let low = 0, high = 5 * Y;
    let N = 0;
     
    while (low <= high)
    {
        let mid = parseInt((high + low) / 2);
 
        if (countFactor(5, mid) < Y)
        {
            low = mid + 1;
        }
        else
        {
            N = mid;
            high = mid - 1;
        }
    }
    return N;
}
 
// Driver code
let Y = 10;
 
document.write(findSmallestX(Y));
 
// This code is contributed by subhammahato348
 
</script>
Producción: 

45

 

Publicación traducida automáticamente

Artículo escrito por rupesh_rao y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *