Secuencia de Euclides-Mullin

Dado un número entero N , la tarea es imprimir los primeros N elementos de la Secuencia Euclid-Mullin . La secuencia de Euclid-Mullin es una secuencia de números primos donde cada elemento es el menor factor primo de uno más el producto de todos los elementos anteriores. La secuencia lleva el nombre del antiguo matemático griego Euclides . Ejemplos:

Entrada: N = 14 Salida: 2 3 7 43 13 53 5 6221671 38709183810571 139 2801 11 17 5471

Enfoque: La sucesión de Euclid-Mullin es una sucesión de números primos donde el n-ésimo número de sucesión es:  a(n) = Least prime factor of ( 1 + \sum_{x=1}^{n-1} a(x)) \\  Por lo tanto, ejecutaremos un ciclo de 1 a N y tomaremos un producto variable que inicialmente es 1 y contendrá el producto de todos los números anteriores. elementos. Luego encontraremos el factor primo más pequeño de (1 + producto) en tiempo O(sqrt(n)) e imprimiremos el número. Tenga en cuenta que el código no puede imprimir números después del elemento 14 porque el producto se vuelve demasiado grande y encontrar su factor primo más pequeño lleva mucho tiempo. A continuación se muestra la implementación del enfoque anterior: 

Java

// Java implementation of the approach
import java.math.BigInteger;
class GFG {
 
    // Function to return the smallest prime factor of n
    static BigInteger smallestPrimeFactor(BigInteger n)
    {
 
        // Initialize i = 2
        BigInteger i = BigInteger.valueOf(2);
 
        // While i <= sqrt(n)
        while ((i.multiply(i)).compareTo(n) <= 0) {
 
            // If n is divisible by i
            if (n.mod(i).compareTo(BigInteger.ZERO) == 0)
                return i;
 
            // Increment i
            i = i.add(BigInteger.ONE);
        }
        return n;
    }
 
    // Function to print the first n
    // terms of the required sequence
    static void solve(BigInteger n)
    {
        // To store the product of the previous terms
        BigInteger product = BigInteger.ONE;
 
        // Traverse the prime numbers
        BigInteger i = BigInteger.ZERO;
        while (i.compareTo(n) < 0) {
 
            // Current term will be smallest prime
            // factor of (1 + product of all previous terms)
            BigInteger num = smallestPrimeFactor(product.add(BigInteger.ONE));
 
            // Print the current term
            System.out.print(num + " ");
 
            // Update the product
            product = product.multiply(num);
            i = i.add(BigInteger.ONE);
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        // Find the first 14 terms of the sequence
        BigInteger b = BigInteger.valueOf(14);
        solve(b);
    }
}

Python3

# Python3 implementation of the approach
 
# Function to return the smallest prime factor of n
def smallestPrimeFactor(n):
 
    # Initialize i = 2
    i = 2
 
    # While i <= sqrt(n)
    while (i * i) <= n :
 
        # If n is divisible by i
        if n % i == 0:
            return i
 
        # Increment i
        i += 1
    return n
 
# Function to print the first n
# terms of the required sequence
def solve(n):
 
    # To store the product of the previous terms
    product = 1
 
    # Traverse the prime numbers
    i = 0
    while i < n:
 
        # Current term will be smallest prime
        # factor of (1 + product of all previous terms)
        num = smallestPrimeFactor(product + 1)
 
        # Print the current term
        print(num, end=' ')
 
        # Update the product
        product = product * num
        i += 1
 
# Driver code
# Find the first 14 terms of the sequence
b = 14
solve(b)
 
# This code is contributed by divyamohan123
Producción:

2 3 7 43 13 53 5 6221671 38709183810571 139 2801 11 17 5471

Complejidad de tiempo: O(n*sqrt(n))

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

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