Comprobar si un número dado divide la suma de los factoriales de sus dígitos

Dado un número entero N , la tarea es verificar si N divide la suma de los factoriales de sus dígitos.

Ejemplos: 

Entrada: N = 19 
Salida: Sí 
1! + 9! = 1 + 362880 = 362881, que es divisible por 19.

Entrada: N = 20 
Salida: No 
0! + 2! = 1 + 4 = 5, que no es divisible por 20.  

Enfoque: primero, almacene los factoriales de todos los dígitos del 0 al 9 en una array. Y, para el número N dado, comprueba si divide la suma de los factoriales de sus dígitos.

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 that returns true if n divides
// the sum of the factorials of its digits
bool isPossible(int n)
{
 
    // To store factorials of digits
    int fac[10];
    fac[0] = fac[1] = 1;
 
    for (int i = 2; i < 10; i++)
        fac[i] = fac[i - 1] * i;
 
    // To store sum of the factorials
    // of the digits
    int sum = 0;
 
    // Store copy of the given number
    int x = n;
 
    // Store sum of the factorials
    // of the digits
    while (x) {
        sum += fac[x % 10];
        x /= 10;
    }
 
    // If it is divisible
    if (sum % n == 0)
        return true;
 
    return false;
}
 
// Driver code
int main()
{
    int n = 19;
 
    if (isPossible(n))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

Java

// Java implementation of the approach
class GFG
{
     
    // Function that returns true if n divides
    // the sum of the factorials of its digits
    static boolean isPossible(int n)
    {
     
        // To store factorials of digits
        int fac[] = new int[10];
        fac[0] = fac[1] = 1;
     
        for (int i = 2; i < 10; i++)
            fac[i] = fac[i - 1] * i;
     
        // To store sum of the factorials
        // of the digits
        int sum = 0;
     
        // Store copy of the given number
        int x = n;
     
        // Store sum of the factorials
        // of the digits
        while (x != 0)
        {
            sum += fac[x % 10];
            x /= 10;
        }
     
        // If it is divisible
        if (sum % n == 0)
            return true;
     
        return false;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int n = 19;
     
        if (isPossible(n))
            System.out.println("Yes");
        else
            System.out.println("No");
     
    }
}
 
// This code is contributed by Ryuga

Python3

# Python 3 implementation of the approach
 
# Function that returns true if n divides
# the sum of the factorials of its digits
def isPossible(n):
     
    # To store factorials of digits
    fac = [0 for i in range(10)]
    fac[0] = 1
    fac[1] = 1
 
    for i in range(2, 10, 1):
        fac[i] = fac[i - 1] * i
 
    # To store sum of the factorials
    # of the digits
    sum = 0
 
    # Store copy of the given number
    x = n
 
    # Store sum of the factorials
    # of the digits
    while (x):
        sum += fac[x % 10]
        x = int(x / 10)
 
    # If it is divisible
    if (sum % n == 0):
        return True
 
    return False
 
# Driver code
if __name__ == '__main__':
    n = 19
 
    if (isPossible(n)):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by
# Surendra_Gangwar

C#

// C# implementation of the approach
using System;
class GFG
{
     
    // Function that returns true if n divides
    // the sum of the factorials of its digits
    static bool isPossible(int n)
    {
     
        // To store factorials of digits
        int[] fac = new int[10];
        fac[0] = fac[1] = 1;
     
        for (int i = 2; i < 10; i++)
            fac[i] = fac[i - 1] * i;
     
        // To store sum of the factorials
        // of the digits
        int sum = 0;
     
        // Store copy of the given number
        int x = n;
     
        // Store sum of the factorials
        // of the digits
        while (x != 0)
        {
            sum += fac[x % 10];
            x /= 10;
        }
     
        // If it is divisible
        if (sum % n == 0)
            return true;
     
        return false;
    }
     
    // Driver code
    public static void Main ()
    {
        int n = 19;
     
        if (isPossible(n))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This code is contributed by Code_Mech.

PHP

<?php
// PHP implementation of the approach
 
// Function that returns true if n divides
// the sum of the factorials of its digits
function isPossible($n)
{
 
    // To store factorials of digits
    $fac = array();
    $fac[0] = $fac[1] = 1;
 
    for ($i = 2; $i < 10; $i++)
        $fac[$i] = $fac[$i - 1] * $i;
 
    // To store sum of the factorials
    // of the digits
    $sum = 0;
 
    // Store copy of the given number
    $x = $n;
 
    // Store sum of the factorials
    // of the digits
    while ($x)
    {
        $sum += $fac[$x % 10];
        $x /= 10;
    }
 
    // If it is divisible
    if ($sum % $n == 0)
        return true;
 
    return false;
}
 
// Driver code
$n = 19;
 
if (isPossible($n))
    echo "Yes";
else
    echo "No";
 
// This code is contributed by Akanksha Rai
?>

Javascript

<script>
 
// JavaScript implementation of the approach
 
// Function that returns true if n divides
// the sum of the factorials of its digits
function isPossible(n)
{
     
    // To store factorials of digits
    var fac = new Array(10);
    fac[0] = fac[1] = 1;
 
    for(var i = 2; i < 10; i++)
        fac[i] = fac[i - 1] * i;
 
    // To store sum of the factorials
    // of the digits
    var sum = 0;
 
    // Store copy of the given number
    var x = n;
 
    // Store sum of the factorials
    // of the digits
    while (x != 0)
    {
        sum += fac[x % 10];
        x = parseInt(x / 10);
    }
 
    // If it is divisible
    if (sum % n == 0)
        return true;
 
    return false;
}
 
// Driver Code
var n = 19;
     
if (isPossible(n))
    document.write("Yes");
else
    document.write("No");
   
// This code is contributed by Khushboogoyal499
 
</script>
Producción: 

Yes

 

Complejidad de tiempo: O (logn)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por pawan_asipu 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 *