Algoritam primarnog faktora: C, Python Primjer
โก Pametni saลพetak
Algoritam prostih faktora rastavlja bilo koji pozitivni cijeli broj na produkt prostih brojeva koristeฤi probno dijeljenje do kvadratnog korijena ili varijantu Eratostenova sita koja pohranjuje svaki najmanji prosti faktor.

ล to je prosta faktorizacija?
Prosti faktor broja je faktor koji je sam po sebi glavni broj, djeljiv samo s 1 i samim sobom.
Primjer: Prosti djelitelji broja 10 su 2 i 5, buduฤi da je 2 ร 5 = 10.
Pronalaลพenje prostih faktora pomoฤu iteracije
Iteriraj od 2 do sqrt(n) i provjeri djeljivost. Dok je n djeljiv s trenutnim kandidatom, podijeli i ispiลกi.
Primjer: svaki prosti broj veฤi od 40 odgovara n2+n+41, pa n = 0, 1, 2 daje 41, 43, 47.
Kako ispisati prosti faktor broja?
- Iteriraj brojeve od 2 do sqrt(n).
- Provjerite modul n u odnosu na svakog kandidata; ostatak nula znaฤi da je kandidat prosti faktor.
- Sakupi sve proste brojeve koji dijele n.
- Rutina se izvrลกava u vremenskoj sloลพenosti O(sqrt(n)).
Algoritam:
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
Algoritam sita
Metoda sita pohranjuje najmanji prosti faktor svakog broja do maksimalne granice, oลกtro smanjujuฤi troลกak faktorizacije nakon predraฤuna.
- Zapiลกite najmanji prosti djelitelj svakog cijelog broja do maksimalne granice.
- Uzmi taj najmanji prosti broj i dodaj ga skupu faktora.
- Podijelite broj s tim prostim brojem i ponavljajte postupak dok ne doฤete do 1.
- Svaki upit se izvrลกava za otprilike O(log n).
Primjer: Prost broj koji nije 2 i 3 odgovara obliku 6n-1 ili 6n+1. Na primjer, 5 = 6(1)-1 i 19 = 6(3)+1.
Algoritam: definirati poredak koja pohranjuje najmanji prosti djelitelj svakog broja, koristeฤi indeks kao poฤetnu vrijednost za svaki element.
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]
Vezani ฤlanci
- Struktura podataka grafikona i Algorithms
- Problem putujuฤeg trgovca
- Algoritam metode bisekcije
- Algoritam za sortiranje spremnika
Python Primarni faktori koriลกtenjem iteracije
Sljedeฤe Python kod pronalazi proste faktore koristeฤi iterativnu metodu pokuลกaja i dijeljenja:
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)
Izlaz:
Enter the number you want: 4 2 2
Python Primarni faktori koriลกtenjem rekurzije
The Python Donji kod koristi metodu sita za pronalaลพenje prostih faktora zadanog broja.
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)
Izlaz:
Enter the number you want: 4 2 2
Program C prostih faktora koriลกtenjem iteracije
Isto iterativno rjeลกenje napisano u CUpiลกite broj, zatim za svakog kandidata od 2 do sqrt(n) provjerite djeljivost i ispiลกite svaku pojavu prostog djelitelja.
#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; }
Izlaz:
Enter the number you want: 2 2
Program C prostih faktora koriลกtenjem rekurzije
Rekurzivna C verzija odraลพava Python Prvo: izgraditi niz najmanjih prostih faktora, a zatim rekurzivno dijeliti tim faktorom dok n ne dosegne 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; }
Izlaz:
Enter the number you want: 2 2
Nekoliko zanimljivih ฤinjenica o prostim brojevima
- Bilo koji paran broj osim 2 moลพe se zapisati kao zbroj dvaju prostih brojeva (4 = 2 + 2, 6 = 3 + 3, 8 = 5 + 3).
- Ne postoje uzastopni prosti brojevi osim 2 i 3, jer je 2 jedini paran prost broj.
- Svaki prosti broj osim 2 i 3 odgovara obliku 6n + 1 ili 6n โ 1, gdje je n pozitivan cijeli broj.
- Skup prostih faktora broja je jedinstven.
- Broj 1 nije ni prost ni sloลพen broj.
- Prosta faktorizacija pomaลพe kod djeljivosti, pojednostavljenja razlomaka i pronalaลพenja zajedniฤkih nazivnika.
- Faktorizacija prostih brojeva takoฤer je temelj kriptografskih kodova temeljenih na brojevima.

