Algoritmul factorului prim: C, Python Exemplu
Ce este o factorizare primฤ?
Factorul prim al unui dat Orice numฤrul este factorul care este a numฤr prim. Factorii atunci cรขnd sunt รฎnmulศiศi vฤ oferฤ un alt numฤr. Un numฤr prim este divizibil cu el รฎnsuศi sau cu 1.
Cu alte cuvinte, factorii primi sunt determinaศi prin gฤsirea numerelor prime care se รฎnmulศesc รฎmpreunฤ pentru a forma numฤrul original.
Exemplu: Factorii primi ai lui 10 sunt 2 ศi 5. Acest lucru se datoreazฤ faptului cฤ 2X5 =10 ศi ambele 2,5 sunt numere prime.
Gฤsirea factorilor primi folosind iteraศie
Pentru a gฤsi factorii primi ai unui numฤr dat, mai รฎntรขi repetฤm โโtoate numerele de la 2 pรขnฤ la rฤdฤcina pฤtratฤ a numฤrului, apoi verificฤm dacฤ fiecare numฤr este prim. Atรขta timp cรขt numฤrul original este รฎmpฤrศit la acest prim, continuฤm sฤ adฤugฤm acest prim cu fiecare iteraศie.
Exemplu:
Fiecare numฤr prim mai mare de 40 se scrie cu urmฤtoarea formulฤ: n2+n+41. Deci, putem รฎnlocui n cu toate numerele pentru a gฤsi factorul prim corespunzฤtor. de exemplu, 02+0+41=41, 12+1+41=43, 22+2+41=47,...
Cum se imprimฤ un factor prim al unui numฤr?
- รn aceastฤ metodฤ, vom repeta numerele de la 2 pรขnฤ la rฤdฤcina pฤtratฤ a numฤrului, aศa cum sa menศionat รฎn secศiunea anterioarฤ.
- Pentru aceasta, trebuie sฤ verificฤm modulul numฤrului iniศial pe fiecare dintre numerele de la 2 pรขnฤ la rฤdฤcina pฤtratฤ a lui n .
- Apoi, gฤsim lista numerelor prime care sunt factori ai lui n.
- Aceastฤ soluศie este รฎn complexitatea de timp O(Sqrt(n)).
algoritm:
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
Algoritmul Sieve
Metoda Sieve se bazeazฤ pe stocarea celui mai mic factor prim al numerelor, ceea ce reduce semnificativ complexitatea atunci cรขnd se calculeazฤ factorii primi pentru orice numฤr. Algoritmul Sieve gฤseศte toศi factorii primi oarecum eficient.
- Conceptul principal al acestui algoritm este de a stoca cel mai mic factor prim al fiecฤrui numฤr pรขnฤ la numฤrul maxim.
- Luฤm cel mai mic prim pentru fiecare numฤr dat ศi รฎl adฤugฤm la setul de factori primi.
- รn cele din urmฤ, รฎmpฤrศim la acest numฤr prim ศi repetฤm โโaceศti paศi pรขnฤ ajungem la 1.
- Toate acestea se realizeazฤ รฎn complexitatea timpului O(log(n)), รฎmbunฤtฤศind foarte mult eficienศa soluศiei.
- Ceea ce face posibilฤ calcularea factorilor primi ai unor numere mult mai mari decรขt cei cu care am fi putut sฤ ne ocupฤm folosind abordarea anterioarฤ.
Exemplu:
A doua modalitate este de a verifica dacฤ numฤrul poate fi scris ca 6n-1 sau 6n+1, deoarece orice numฤr prim, altul decรขt 2 ศi 3, ar trebui scris รฎn una dintre cele douฤ formule. de exemplu, 5=6(1)-1, 19=6(3)+1,... .
algoritm:
Definiศi o matrice pentru a stoca cel mai mic factor prim al fiecฤrui numฤr cu valoarea indexului ca valoare iniศialฤ pentru fiecare element al mulศime.
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 Factori primi folosind iteraศia
Aici, vom afiศa un cod รฎn Python limbaj pentru a gฤsi factorii primi ai unui numฤr dat รฎntr-o metodฤ iterativฤ:
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)
ieศire:
Enter the number you want: 4 4
Python Factori primi care folosesc recursiunea
Aceastฤ secศiune aratฤ un cod รฎn Python limbฤ folosind metoda sitฤ pentru a gฤsi factorii primi ai unui numฤr dat.
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)
ieศire:
Enter the number you want: 4 2 2
Programul de factori primi C folosind iteraศia
Este aceeaศi soluศie ca cea iterativฤ python, dar scrisฤ รฎn Limbajul C.
Cerem utilizatorului sฤ introducฤ numฤrul, apoi pentru fiecare numฤr de la 2 la rฤdฤcina pฤtratฤ a acestui numฤr, trebuie sฤ verificฤm dacฤ este divizibil prin imprimarea tuturor apariศiilor acestui 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;
}
ieศire:
Enter the number you want: 2 2
C Programul de factori primi care utilizeazฤ recursiunea
Aceasta este aceeaศi soluศie ca cea recursivฤ python, dar scrisฤ รฎn C.
Putem cere utilizatorului sฤ introducฤ numฤrul; apoi, construim tabloul de numere prime care stocheazฤ cel mai mic factor prim al fiecฤrui numฤr. รn cele din urmฤ, numim funcศia recursivฤ Factori primi, care รฎmparte numฤrul dat la cel mai mic factor prim al sฤu ศi se reaminteศte pรขnฤ cรขnd ajunge la unu.
#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;
}
ieศire:
Enter the number you want: 2 2
Cรขteva fapte interesante despre numerele prime
- Unul dintre cele mai interesante fapte este cฤ orice numฤr par, altul decรขt 2, poate fi suma a douฤ numere prime.
- De exemplu: 4 = 2 + 2, 6 = 3 + 3, 8 = 5 + 3 โฆ etc.
- Un alt fapt este cฤ nu existฤ numere prime consecutive, altele decรขt 2 ศi 3, deoarece singurul numฤr prim par este numฤrul 2.
- De asemenea, toate numerele prime, cu excepศia lui 2 ศi 3, pot fi scrise sub urmฤtoarea formฤ: 6 * n + 1 sau 6 * n โ 1, unde n este un numฤr รฎntreg pozitiv.
- Setul de factori primi ai unui numฤr este unul unic.
- Numฤrul 1 nu este nici prim, nici compus.
- Descompunerea รฎn factori primi a numerelor poate ajuta la rezolvarea unor probleme precum divizibilitatea, simplificarea fracศiilor ศi gฤsirea numitorilor comuni ai diferitelor fracศii.
- De asemenea, una dintre utilizฤrile interesante ale factorizฤrii prime este ruperea codurilor secrete care se bazeazฤ pe numere.

