Algoritmo de factor primo: C, Python Ejemplo

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

El factor primo de un dado cualquier El nรบmero es el factor que es un nรบmero primo. Los factores cuando se multiplican dan otro nรบmero. Un nรบmero primo es divisible por sรญ mismo o por 1.

En otras palabras, los factores primos se determinan encontrando quรฉ nรบmeros primos se multiplican entre sรญ para formar el nรบmero original.

Ejemplo:Los factores primos de 10 son 2 y 5. Esto se debe a que 2X5 = 10 y ambos 2,5 son nรบmeros primos.

Encontrar los factores primos usando la iteraciรณn

Para encontrar los factores primos de un nรบmero dado, primero iteramos sobre todos los nรบmeros desde 2 hasta la raรญz cuadrada del nรบmero y luego verificamos si cada nรบmero es primo. Siempre que el nรบmero original sea divisible por este primo, seguimos sumando este primo en cada iteraciรณn.

Ejemplo:

Todo nรบmero primo mayor que 40 se escribe con la siguiente fรณrmula: n2+n+41. Por lo tanto, podemos sustituir n por todos los nรบmeros para encontrar el factor primo correspondiente, por ejemplo, 0.2+0+41=41, 12+1+41=43, 22+2+41=47,โ€ฆ

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

  • En este mรฉtodo, iteraremos sobre los nรบmeros desde 2 hasta la raรญz cuadrada del nรบmero, como se mencionรณ en la secciรณn anterior.
  • Para ello, necesitamos comprobar el mรณdulo del nรบmero original en cada uno de los nรบmeros desde 2 hasta la raรญz cuadrada de n.
  • Luego, encontramos la lista de nรบmeros primos que son factores de n.
  • Esta soluciรณn tiene una complejidad de tiempo 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 Sieve se basa en almacenar el factor primo mรกs pequeรฑo de los nรบmeros, lo que reduce notablemente la complejidad al calcular los factores primos de cualquier nรบmero. El algoritmo Sieve encuentra todos los factores primos con relativa eficiencia.

  • El concepto principal de este algoritmo es almacenar el factor primo mรกs pequeรฑo de cada nรบmero hasta el nรบmero mรกximo.
  • Tomamos el primo mรกs pequeรฑo de cada nรบmero dado y lo sumamos al conjunto de factores primos.
  • Finalmente, dividimos por este nรบmero primo y repetimos estos pasos hasta llegar a 1.
  • Todo esto se hace en una complejidad de tiempo O(log(n)), lo que mejora mucho la eficiencia de la soluciรณn.
  • Lo que permite calcular los factores primos de nรบmeros mucho mayores que los que podrรญamos haber manejado utilizando el enfoque anterior.

Ejemplo:

La segunda forma es comprobar si el nรบmero se puede escribir como 6n-1 o 6n+1, ya que cualquier nรบmero primo distinto de 2 y 3 debe escribirse en una de las dos fรณrmulas. por ejemplo, 5=6(1)-1, 19=6(3)+1,โ€ฆ.

Algoritmo:

Defina una matriz para almacenar el factor primo mรกs pequeรฑo de cada nรบmero con el valor del รญndice como valor inicial para cada elemento del matriz.

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]

Python Factores primos usando iteraciรณn

Aquรญ mostraremos un cรณdigo en Python lenguaje para encontrar los factores primos de un nรบmero dado en un mรฉtodo iterativo:

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
4

Python Factores primos mediante recursividad

Esta secciรณn muestra un cรณdigo en Python idioma usando el mรฉtodo del tamiz para encontrar los factores primos de un nรบmero dado.

import math
High = (int)(1e5+7)
array=[0 for i in range(High)]
# function to generate all the smallest prime 
def Sieve():
#factors of the numbers until the maximum  number
    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):
#We will keep dividing until we reach 1
    if n == 1:
        return
    print((int)(array[n]))
    PrimeFactors((int)(n/array[n]))
#Here we call the function after dividing it by this prime
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

Es la misma soluciรณn que la iterativa de Python pero escrita en Lenguaje C.

Le pedimos al usuario que ingrese el nรบmero, luego, para cada nรบmero desde 2 hasta la raรญz cuadrada de este nรบmero, debemos verificar si es divisible imprimiendo todas las apariciones de este factor.

#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

Esta es la misma soluciรณn que la recursiva de Python pero escrita en C.

Podemos pedirle al usuario que ingrese el nรบmero; luego, construimos la matriz de nรบmeros primos que almacena el factor primo mรกs pequeรฑo de cada nรบmero. Finalmente, llamamos funciรณn recursiva de factores primos, que divide el nรบmero dado por su factor primo mรกs pequeรฑo y se recupera hasta llegar a uno.

#include <stdio.h>
int Max = 100007;
int array[100007];
void Sieve()//helping function to generate all the smallest //prime factors of the numbers until the maximum number
{
    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)//keep dividing until we reach 1
    {
        return;
    }
    printf("%d\n",array[n]);
    PrimeFactors(n/array[n]);//call the function after dividing by //this prime
}
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

  • Uno de los datos mรกs interesantes es que cualquier nรบmero par distinto de 2 puede ser la suma de dos nรบmeros primos.
  • Por ejemplo: 4 = 2 + 2, 6 = 3 + 3, 8 = 5 + 3โ€ฆetc.
  • Otro hecho es que no hay primos consecutivos distintos del 2 y el 3, ya que el รบnico nรบmero primo par es el nรบmero 2.
  • Ademรกs, todos los nรบmeros primos excepto 2 y 3 se pueden escribir en la siguiente forma: 6 * n + 1 o 6 * n โ€“ 1, donde n es un entero positivo.
  • El conjunto de factores primos de un nรบmero es รบnico.
  • El nรบmero 1 no es primo ni compuesto.
  • La factorizaciรณn prima de nรบmeros puede ayudar a resolver problemas como divisibilidad, simplificar fracciones y encontrar denominadores comunes de diferentes fracciones.
  • Ademรกs, uno de los usos interesantes de la factorizaciรณn prima es descifrar cรณdigos secretos basados โ€‹โ€‹en nรบmeros.

Resumir este post con: