Algoritmo de factor primo: C, Python Ejemplo

โšก Resumen inteligente

El algoritmo de factores primos descompone cualquier nรบmero entero positivo en un producto de nรบmeros primos mediante la divisiรณn por tanteo hasta la raรญz cuadrada, o una variante de la criba de Eratรณstenes que almacena cada factor primo mรกs pequeรฑo.

  • ๐Ÿงฎ Definiciรณn: Los factores primos de un nรบmero entero son aquellos nรบmeros primos cuyo producto es igual a dicho nรบmero; por ejemplo, 10 se descompone en 2 y 5.
  • ๐Ÿ” Divisiรณn de Juicios: Iterar desde 2 hasta sqrt(n) y dividir siempre que el mรณdulo sea cero se ejecuta en tiempo O(sqrt(n)).
  • ๐Ÿงฐ Mรฉtodo del tamizado: Almacenar el factor primo mรกs pequeรฑo para cada valor hasta un lรญmite reduce la factorizaciรณn a aproximadamente O(log n) por consulta.
  • ๐Ÿ Python Code: Iterativo y recursivo Python Las implementaciones imprimen cada factor primo de un nรบmero introducido.
  • ๐Ÿ’ป C Code: La comparaciรณn de programas iterativos y recursivos en C demuestra la misma lรณgica utilizando stdio y un array precalculado.
  • ๐Ÿ” Usos: La factorizaciรณn prima permite realizar comprobaciones de divisibilidad, simplificar fracciones, encontrar denominadores comunes y generar claves criptogrรกficas basadas en nรบmeros.

Algoritmo de factor primo

ยฟQuรฉ es una factorizaciรณn prima?

El factor primo de un nรบmero es un factor que es en sรญ mismo un factor primo. nรบmero primo, divisible solo por 1 y por sรญ mismo.

Ejemplo: Los factores primos de 10 son 2 y 5, ya que 2 ร— 5 = 10.

Encontrar los factores primos usando la iteraciรณn

Itera desde 2 hasta sqrt(n) y comprueba la divisibilidad. Mientras n sea divisible por el candidato actual, divide e imprime.

Ejemplo: cada primo mayor que 40 encaja n2+n+41, por lo que n = 0, 1, 2 produce 41, 43, 47.

ยฟCรณmo imprimir un factor primo de un nรบmero?

  • Itera los nรบmeros desde 2 hasta sqrt(n).
  • Comprueba el mรณdulo de n con respecto a cada candidato; un resto cero significa que el candidato es un factor primo.
  • Reรบna todos los nรบmeros primos que dividen a n.
  • La rutina se ejecuta con una complejidad temporal de O(sqrt(n)).

Algoritmo:

Set a counter i to 2
While i <= sqrt(n):
    While n % i == 0:
        n = n / i
        print i
    i = i + 1
if n > 1:
    print n

Algoritmo de tamiz

El mรฉtodo de la criba almacena el factor primo mรกs pequeรฑo de cada nรบmero hasta un lรญmite mรกximo, lo que reduce drรกsticamente el coste de factorizaciรณn despuรฉs del preprocesamiento.

  • Registra el factor primo mรกs pequeรฑo de cada nรบmero entero hasta el lรญmite mรกximo.
  • Toma ese primo mรกs pequeรฑo y agrรฉgalo al conjunto de factores.
  • Divide el nรบmero por ese nรบmero primo y repite el proceso hasta que llegue a 1.
  • Cada consulta se ejecuta en aproximadamente O(log n).

Ejemplo: Un nรบmero primo distinto de 2 y 3 se ajusta a la forma 6n-1 o 6n+1. Por ejemplo, 5 = 6(1)-1 y 19 = 6(3)+1.

Algoritmo: definir un matriz que almacena el factor primo mรกs pequeรฑo de cada nรบmero, utilizando el รญndice como valor inicial para cada elemento.

Set array[1] to 1
Set i to 2
While i*i <= max_number:
    If array[i] == i:
        Set j to i*i
        While j <= max_number:
            If array[j] == j:
                array[j] = i
            j = j + i
    i = i + 1
while the_number != 1:
    print array[the_number]
    the_number = the_number / array[the_number]

Artรญculos Relacionados

Python Factores primos usando iteraciรณn

Las siguientes Python El cรณdigo encuentra factores primos utilizando el mรฉtodo iterativo de divisiรณn por ensayo y error:

import math
def PrimeFactors(n):
    for i in range(2, int(math.sqrt(n)) + 1, 1):
        while n % i == 0:  # find all the occurrences of a prime factor
            print((int)(i))
            n = n // i
    if n != 1:  # if the number was originally a prime
        print((int)(n))
n = (int)(input("Enter the number you want: "))
PrimeFactors(n)

Salida:

Enter the number you want: 4
2
2

Python Factores primos mediante recursividad

El Python El cรณdigo que aparece a continuaciรณn utiliza el mรฉtodo de la criba para encontrar los factores primos de un nรบmero dado.

import math
High = (int)(1e5 + 7)
array = [0 for i in range(High)]

# generate smallest prime factors
def Sieve():
    for i in range(1, High):
        array[i] = i
    for i in range(2, math.ceil(math.sqrt(High))):
        if array[i] == i:
            for j in range(i * i, High, i):
                if array[j] == j:
                    array[j] = i

def PrimeFactors(n):  # divide until we reach 1
    if n == 1:
        return
    print((int)(array[n]))
    PrimeFactors((int)(n / array[n]))

Sieve()
n = (int)(input("Enter the number you want: "))
PrimeFactors(n)

Salida:

Enter the number you want: 4
2
2

Programa de factores primos C mediante iteraciรณn

La misma soluciรณn iterativa escrita en C: ingrese un nรบmero, luego para cada candidato desde 2 hasta sqrt(n), verifique la divisibilidad e imprima cada apariciรณn de un factor primo.

#include <stdio.h>
int main()
{
    int n;
    printf("Enter the number you want: ");
    scanf("%d", &n);
    for (int i = 2; i * i <= n; i++)
    {
        while (n % i == 0)  // find all the occurrences of a prime factor
        {
            printf("%d\n", i);
            n /= i;
        }
    }
    if (n != 1)  // if the number was originally a prime
    {
        printf("%d", n);
    }
    return 0;
}

Salida:

Enter the number you want: 2
2

Programa de factores primos C mediante recursividad

Programa de factores primos C mediante recursividad

La versiรณn recursiva en C refleja la Python uno: construir el arreglo de los factores primos mรกs pequeรฑos, luego dividir recursivamente por ese factor hasta que n llegue a 1.

#include <stdio.h>
int Max = 100007;
int array[100007];

void Sieve()  // smallest prime factors up to Max
{
    for (int i = 1; i < Max; i++)
        array[i] = i;
    for (int i = 2; i * i <= Max; i++)
    {
        if (array[i] == i)
        {
            for (int j = i * i; j < Max; j += i)
            {
                if (array[j] == j)
                    array[j] = i;
            }
        }
    }
}

void PrimeFactors(int n)
{
    if (n == 1)  // divide until we reach 1
        return;
    printf("%d\n", array[n]);
    PrimeFactors(n / array[n]);
}

int main()
{
    Sieve();
    int n;
    printf("Enter the number you want: ");
    scanf("%d", &n);
    PrimeFactors(n);
    return 0;
}

Salida:

Enter the number you want: 2
2

Algunos datos interesantes sobre los nรบmeros primos

  • Cualquier nรบmero par distinto de 2 se puede escribir como la suma de dos nรบmeros primos (4 = 2 + 2, 6 = 3 + 3, 8 = 5 + 3).
  • No hay nรบmeros primos consecutivos aparte del 2 y el 3, porque el 2 es el รบnico nรบmero primo par.
  • Todos los nรบmeros primos, excepto el 2 y el 3, tienen la forma 6n + 1 o 6n โˆ’ 1, donde n es un entero positivo.
  • El conjunto de factores primos de un nรบmero es รบnico.
  • El nรบmero 1 no es ni primo ni compuesto.
  • La factorizaciรณn prima ayuda con la divisibilidad, la simplificaciรณn de fracciones y la bรบsqueda de denominadores comunes.
  • La factorizaciรณn prima tambiรฉn es la base de los cรณdigos criptogrรกficos basados โ€‹โ€‹en nรบmeros.

Preguntas Frecuentes

La factorizaciรณn prima descompone un nรบmero entero en un producto de nรบmeros primos; por ejemplo, 12 = 2 ร— 2 ร— 3. Los factores primos son รบnicos para cada nรบmero entero mayor que uno.

Si n tiene un factor mayor que โˆšn, su par es menor y ya se habrรญa encontrado. Cualquier factor mayor que โˆšn repite el proceso.

La divisiรณn por tanteo se ejecuta en O(sqrt(n)). El cribado precalcula los factores primos mรกs pequeรฑos en O(N log log N), y luego responde a cada factorizaciรณn en aproximadamente O(log n).

Utilice la criba al factorizar muchos nรบmeros dentro de un lรญmite superior conocido. Un solo cรกlculo previo permite que cada consulta posterior se ejecute en aproximadamente O(log n).

No. El nรบmero 1 no es ni primo ni compuesto, por lo que nunca aparece en una lista de factores primos. La factorizaciรณn prima utiliza nรบmeros primos mayores o iguales a 2.

La factorizaciรณn prima impulsa las pruebas de divisibilidad, la simplificaciรณn de fracciones, el mรญnimo comรบn mรบltiplo (MCM) y el mรกximo comรบn divisor (MCD), y la criptografรญa de clave pรบblica como RSA, donde factorizar un producto grande de dos nรบmeros primos es difรญcil.

Los sistemas de IA aplican la factorizaciรณn prima a caracterรญsticas de la teorรญa de nรบmeros, al anรกlisis de claves criptogrรกficas y al aprendizaje federado seguro. La investigaciรณn en aprendizaje automรกtico poscuรกntico tambiรฉn estudia la resistencia a la factorizaciรณn.

Sรญ. GitHub Copilot y asistentes de IA similares automatizan el cรณdigo repetitivo para las rutinas de divisiรณn de pruebas y cribado, aunque los desarrolladores aรบn verifican la complejidad y los casos lรญmite, como n = 1.

Resumir este post con: