Número de Super-Poulet

El supernúmero de Poulet es un número de Poulet (pseudoprimo) en base 2 si todos y cada uno de los divisores D dividen a  2^{D} - 2    .

Algunos de los números de superpollo son: 
 

341, 1387, 2047, 2701, 3277, 4033…. 
 

Comprobar si N es un número de Super-poulet

Dado un número entero N , la tarea es comprobar que N es un número de Super-Poulet.

Ejemplos: 
 

Entrada: N = 341 
Salida:
Entrada: N = 10 
Salida: No 
 

Planteamiento: La idea es generar todos los divisores del número N y para todos los divisores verifique que D divide  2^{D}-2    . Si esta condición se cumple para todos los divisores, entonces el número es el número de superpoulet.
Por ejemplo: 
 

Para N = 341,
los divisores de 341 son {1, 11, 31, 341} y, de 
\frac{(2^{1} - 2)}{1} = 0
\frac{(2^{11} - 2)}{11} = \frac{2046}{11} = 186
\frac{(2^{31} - 2)}{31} = \frac{2147483646}{31} = 69273666
manera similar,  \frac{(2^{341} - 2)}{341}    también dan un valor entero. 
Por lo tanto, 341 es un número superpoulet. 
 

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

Python3

# Python3 implementation to
# check if N is a super Poulet number
import math
 
# Function to find the divisors
def findDivisors(n):
    divisors = []
     
    # Loop to iterate over the
    # square root of the N
    for i in range(1,\
         int(math.sqrt(n) + 1)):
         
        if (n % i == 0) :
 
            # Check if divisors are equal
            if (n / i == i):
                divisors.append(i)
            else:
                divisors.append(i)
                divisors.append(int(n / i))
    return sorted(divisors)
     
# Function to check if N
# is a super Poulet number
def isSuperdNum(n):
    d = findDivisors(n)
     
    # Loop to check that every
    # divisor divides 2^D - 2
    for i in d:
        x = (2**i-2)/i
        if int(x) != x:
            return False
    return True
 
# Driver Code
if __name__ == "__main__":
    n = 341
    if isSuperdNum(n) == True:
        print("Yes")
    else :
        print("No")

C#

// C# implementation to
// check if N is a super Poulet number
using System;
using System.Collections.Generic;
 
class GFG
{
 
  // Function to find the divisors
  static List<int> findDivisors(int n)
  {
    List<int> divisors = new List<int>();
 
    // Loop to iterate over the
    // square root of the N
    for (int i = 1; i < (Math.Sqrt(n) + 1); i++)
    {
      if (n % i == 0)
      {
 
        // Check if divisors are equal
        if (n / i == i)
          divisors.Add(i);
        else
        {
          divisors.Add(i);
          divisors.Add((n / i));
        }
      }
    }
    divisors.Sort();
    return divisors;
  }
 
  // Function to check if N
  // is a super Poulet number
  static bool isSuperdNum(int n)
  {
    List<int> d = findDivisors(n);
 
    // Loop to check that every
    // divisor divides 2^D - 2
    foreach(int i in d)
    {
      double x = (Math.Pow(2, i) - 2) / i;
      if (Math.Truncate(x) != x)
        return false;
    }
    return true;
  }
 
  // Driver Code
  public static void Main(string[] args)
  {
    int n = 341;
    if (isSuperdNum(n) == true)
      Console.Write("Yes");
    else
      Console.Write("No");
  }
}
 
// This code is contributed by chitranayal.

Javascript

<script>
// Javascript implementation to
// check if N is a super Poulet number
 
// Function to find the divisors
function findDivisors(n){
    let divisors = []
     
    // Loop to iterate over the
    // square root of the N
    for(let i = 1; i < Math.floor(Math.sqrt(n) + 1); i++){
         
        if (n % i == 0) {
 
            // Check if divisors are equal
            if (n / i == i){
                divisors.push(i)
            }
            else{
                divisors.push(i)
                divisors.push(Math.floor(n / i))
            }
        }
    }
    return divisors.sort((a, b)=> a - b)
}
     
// Function to check if N
// is a super Poulet number
function isSuperdNum(n){
    let d = findDivisors(n)
     
    // Loop to check that every
    // divisor divides 2^D - 2
    for(let i in d){
        let x = (2**i - 2) / i
 
        if (Math.floor(x) != x){
            return false
        }
    }
    return true
}
// Driver Code
    let n = 341
    if(isSuperdNum(n) == true){
        document.write("Yes")
    }
    else {
        document.write("No")
    }
 
// This code is contributed by _saurabh_jaiswal
 
</script>
Producción: 

Yes

 

Publicación traducida automáticamente

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