Comprobar si el factorial de N es divisible por la suma de los primeros N números naturales

Dado un número ‘N’. ¿Comprueba si el factorial de ‘N’ es divisible por la suma de los primeros números naturales ‘N’ o no? Si la divisibilidad es posible, escriba SÍ, de lo contrario, escriba NO.
Ejemplos: 
 

Input: N = 3
Output: YES
As (1*2*3)%(1+2+3) = 0, 
Hence divisibility is possible.

Input: N = 4
Output: NO
Here (1*2*3*4)%(1+2+3+4) != 0, 
Hence  divisibility doesn't occur.

Acercarse:
 

  1. Suma de los primeros ‘n’ números naturales: s = (n)*(n+1)/2 . Esto se puede expresar como (n+1)!/2*(n-1)!
  2. Ahora n!/s = 2*(n-1)!/(n+1).
  3. De la fórmula anterior se deriva la observación como: 
    • Si ‘n+1’ es primo entonces ‘n!’ no es divisible por la suma de los primeros ‘n’ números naturales.
    • Si ‘n+1’ no es primo entonces ‘n!’ es divisible por la suma de los primeros ‘n’ números naturales.

Por ejemplo: 
 

  • Sea n = 4.
  • Por tanto, ‘n!/s’ = 2*(3!)/5. = 1*2*3*2/5 .
  • Aquí para n! para ser divisible por ‘s’ necesitamos la presencia de al menos un múltiplo de ‘5’ en el numerador, es decir, en el ejemplo dado, ¡el numerador se expresa como el producto de 3! y 2, para que todo el producto sea divisible por ‘5’, 
    debe haber al menos un múltiplo de 5, es decir, 5*1 o 5*2 o 5*3 y así sucesivamente. Dado que en el término factorial el número más alto presente es ‘n-1’, el producto, es decir, el numerador nunca puede expresarse con términos de ‘n+1’ si ‘n+1’ es primo. Por lo tanto, la divisibilidad nunca es posible.
  • En cualquier otro caso, ya sea que ‘n+1’ sea par o impar pero no ‘primo’, la divisibilidad siempre es posible.

Nota: Se debe tener especial cuidado para el caso n=1. como 1! siempre es divisible por 1.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

#include <bits/stdc++.h>
using namespace std;
 
// Function to check whether
// a number is prime or not.
bool is_prime(int num)
{
 
    // Count variable to store
    // the number of factors of 'num'
    int count = 0;
 
    // Counting the number of factors
    for (int i = 1; i * i <= (num); i++) {
 
        if ((num) % i == 0) {
 
            if (i * i != (num))
                count += 2;
 
            else
                count++;
        }
    }
 
    // If number is prime return true
    if (count == 2)
        return true;
 
    else
        return false;
}
 
// Function to check for divisibility
string is_divisible(int n)
{
 
    // if 'n' equals 1 then divisibility is possible
    if (n == 1) {
        return "YES";
    }
 
    // Else check whether 'n+1' is prime or not
    else {
 
        // If 'n+1' is prime then 'n!' is
        // not divisible by 'n*(n+1)/2'
        if (is_prime(n + 1))
            return "NO";
 
        // else divisibility occurs
        else
            return "YES";
    }
}
 
// Driver Code
int main()
{
 
    int n;
 
    // Test for n=3
    n = 3;
 
    cout << is_divisible(n) << endl;
 
    // Test for n=4
    n = 4;
 
    cout << is_divisible(n) << endl;
 
    return 0;
}

Java

class GfG
{
 
// Function to check whether
// a number is prime or not.
static boolean is_prime(int num)
{
 
    // Count variable to store
    // the number of factors of 'num'
    int count = 0;
 
    // Counting the number of factors
    for (int i = 1; i * i <= (num); i++)
    {
 
        if ((num) % i == 0)
        {
 
            if (i * i != (num))
                count += 2;
 
            else
                count++;
        }
    }
 
    // If number is prime return true
    if (count == 2)
        return true;
 
    else
        return false;
}
 
// Function to check for divisibility
static String is_divisible(int n)
{
 
    // if 'n' equals 1 then divisibility is possible
    if (n == 1)
    {
        return "YES";
    }
 
    // Else check whether 'n+1' is prime or not
    else
    {
 
        // If 'n+1' is prime then 'n!' is
        // not divisible by 'n*(n+1)/2'
        if (is_prime(n + 1))
            return "NO";
 
        // else divisibility occurs
        else
            return "YES";
    }
}
 
// Driver Code
public static void main(String[] args)
{
 
    int n;
 
    // Test for n=3
    n = 3;
 
    System.out.println(is_divisible(n));
 
    // Test for n=4
    n = 4;
 
    System.out.println(is_divisible(n));
}
}
 
// This code is contributed by Prerna Saini

Python3

# Function to check whether
# a number is prime or not.
def is_prime(num):
 
    # Count variable to store
    # the number of factors of 'num'
    count = 0
 
    # Counting the number of factors
    for i in range(1, num + 1):
 
        if i * i > num:
            break
 
        if ((num) % i == 0):
 
            if (i * i != (num)):
                count += 2
            else:
                count += 1
         
    # If number is prime return true
    if (count == 2):
        return True
    else:
        return False
 
# Function to check for divisibility
def is_divisible(n):
 
    # if 'n' equals 1 then
    # divisibility is possible
    if (n == 1):
        return "YES"
 
    # Else check whether 'n+1' is prime or not
    else:
 
        # If 'n+1' is prime then 'n!' is
        # not divisible by 'n*(n+1)/2'
        if (is_prime(n + 1)):
            return "NO"
             
        # else divisibility occurs
        else:
            return "YES"
     
# Driver Code
 
# Test for n=3
n = 3
 
print(is_divisible(n))
 
# Test for n=4
n = 4
 
print(is_divisible(n))
 
# This code is contributed
# by mohit kumar

C#

// C# implement the approach
class GfG
{
 
// Function to check whether
// a number is prime or not.
static bool is_prime(int num)
{
 
    // Count variable to store
    // the number of factors of 'num'
    int count = 0;
 
    // Counting the number of factors
    for (int i = 1; i * i <= (num); i++)
    {
 
        if ((num) % i == 0)
        {
 
            if (i * i != (num))
                count += 2;
 
            else
                count++;
        }
    }
 
    // If number is prime return true
    if (count == 2)
        return true;
 
    else
        return false;
}
 
// Function to check for divisibility
static string is_divisible(int n)
{
 
    // if 'n' equals 1 then divisibility is possible
    if (n == 1)
    {
        return "YES";
    }
 
    // Else check whether 'n+1' is prime or not
    else
    {
 
        // If 'n+1' is prime then 'n!' is
        // not divisible by 'n*(n+1)/2'
        if (is_prime(n + 1))
            return "NO";
 
        // else divisibility occurs
        else
            return "YES";
    }
}
 
// Driver Code
static void Main()
{
 
    int n;
 
    // Test for n=3
    n = 3;
 
    System.Console.WriteLine(is_divisible(n));
 
    // Test for n=4
    n = 4;
 
    System.Console.WriteLine(is_divisible(n));
}
}
 
// This code is contributed by mits

PHP

<?php
// Function to check whether
// a number is prime or not.
function is_prime($num)
{
 
    // Count variable to store
    // the number of factors of 'num'
    $count1 = 0;
 
    // Counting the number of factors
    for ($i = 1; $i * $i <= ($num); $i++)
    {
        if (($num) % $i == 0)
        {
 
            if ($i * $i != ($num))
                $count1 += 2;
 
            else
                $count1++;
        }
    }
 
    // If number is prime return true
    if ($count1 == 2)
        return true;
 
    else
        return false;
}
 
// Function to check for divisibility
function is_divisible($n)
{
 
    // if 'n' equals 1 then divisibility is possible
    if ($n == 1)
    {
        return "YES";
    }
 
    // Else check whether 'n+1' is prime or not
    else
    {
 
        // If 'n+1' is prime then 'n!' is
        // not divisible by 'n*(n+1)/2'
        if (is_prime($n + 1))
            return "NO";
 
        // else divisibility occurs
        else
            return "YES";
    }
}
 
// Driver Code
 
// Test for n=3
$n = 3;
 
echo is_divisible($n) . "\n";
 
// Test for n=4
$n = 4;
 
echo is_divisible($n) . "\n";
 
// This code is contributed by Akanksha Rai
?>

Javascript

<script>
// Function to check whether
// a number is prime or not.
function is_prime(num)
{
 
    // Count variable to store
    // the number of factors of 'num'
    var count = 0;
 
    // Counting the number of factors
    for (i = 1; i * i <= (num); i++)
    {
 
        if ((num) % i == 0)
        {
 
            if (i * i != (num))
                count += 2;
 
            else
                count++;
        }
    }
 
    // If number is prime return true
    if (count == 2)
        return true;
 
    else
        return false;
}
 
// Function to check for divisibility
function is_divisible(n)
{
 
    // if 'n' equals 1 then divisibility is possible
    if (n == 1)
    {
        return "YES";
    }
 
    // Else check whether 'n+1' is prime or not
    else
    {
 
        // If 'n+1' is prime then 'n!' is
        // not divisible by 'n*(n+1)/2'
        if (is_prime(n + 1))
            return "NO";
 
        // else divisibility occurs
        else
            return "YES";
    }
}
 
// Driver Code
var n;
 
// Test for n=3
n = 3;
document.write(is_divisible(n)+"<br>");
 
// Test for n=4
n = 4;
document.write(is_divisible(n));
 
// This code is contributed by Princi Singh
</script>
Producción: 

YES
NO

 

Complejidad de tiempo: O (sqrtn)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

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