Prime Factor Algoritme: C, Python Eksempel
Hvad er en Prime Factorization?
Primfaktoren for en given enhver tal er den faktor, der er a primtal. Faktorer, nรฅr de ganges, giver dig et andet tal. Et primtal er deleligt med sig selv eller 1 .
Med andre ord bestemmes primtal ved at finde ud af, hvilke primtal der multipliceres sammen for at danne det oprindelige tal.
Eksempel: Primfaktorer pรฅ 10 er 2 og 5. Dette skyldes, at 2X5 =10 og begge 2,5 er primtal.
Find de primรฆre faktorer ved hjรฆlp af iteration
For at finde primfaktorerne for et givet tal, itererer vi fรธrst over alle tallene fra 2 indtil kvadratroden af โโtallet, og kontrollerer derefter, om hvert tal er primtal. Sรฅ lรฆnge det oprindelige tal kan divideres med dette primtal, bliver vi ved med at tilfรธje dette primtal for hver iteration.
Eksempel:
Hvert primtal stรธrre end 40 skrives i fรธlgende formel: n2+n+41. Sรฅ vi kan erstatte n med alle tallene for at finde den tilsvarende primfaktor. fx 02+0+41=41, 12+1+41=43, 22+2+41=47,...
Hvordan udskriver man en primfaktor for et tal?
- I denne metode vil vi iterere over tallene fra 2 til kvadratroden af โโtallet, som nรฆvnt i forrige afsnit.
- Til det skal vi kontrollere modulet af det oprindelige tal pรฅ hvert af tallene fra 2 indtil kvadratroden af โโn .
- Derefter finder vi listen over primtal, der er faktorer af n.
- Denne lรธsning er i O(Sqrt(n)) tidskompleksitet.
Algoritme:
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
Sigte algoritme
Sigtemetoden er afhรฆngig af at gemme den mindste primfaktor af tallene, hvilket reducerer kompleksiteten mรฆrkbart, nรฅr primfaktorerne beregnes for ethvert tal. Sigtealgoritmen finder alle primfaktorerne noget effektivt.
- Hovedkonceptet for denne algoritme er at gemme den mindste primfaktor for hvert tal indtil det maksimale antal.
- Vi tager det mindste primtal for hvert givet tal og lรฆgger det til sรฆttet af primfaktorer.
- Til sidst dividerer vi med dette primtal og gentager disse trin, indtil vi nรฅr 1.
- Dette er alt sammen gjort i O(log(n)) tidskompleksitet, hvilket forbedrer lรธsningens effektivitet meget.
- Hvilket gรธr det muligt at beregne primfaktorerne for meget stรธrre tal end dem, vi kunne have beskรฆftiget os med ved hjรฆlp af den tidligere tilgang.
Eksempel:
Den anden mรฅde er at kontrollere, om tallet kan skrives som 6n-1 eller 6n+1, da ethvert andet primtal end 2 og 3 skal skrives i en af โโde to formler. fx 5=6(1)-1, 19=6(3)+1,โฆ.
Algoritme:
Definer et array-array for at gemme den mindste primfaktor af hvert tal med indeksvรฆrdien som en startvรฆrdi for hvert element i matrix.
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 Primรฆre faktorer ved hjรฆlp af iteration
Her vil vi vise en kode i Python sprog til at finde primfaktorerne for et givet tal i en iterativ metode:
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)
Output:
Enter the number you want: 4 4
Python Primรฆre faktorer, der bruger rekursion
Dette afsnit viser en kode i Python Sprog ved hjรฆlp af sigtemetoden til at finde primfaktorerne for et givet tal.
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)
Output:
Enter the number you want: 4 2 2
C Prime Factors-program ved hjรฆlp af iteration
Det er den samme lรธsning som den iterative python, men skrevet i C-sprog.
Vi beder brugeren om at indtaste tallet, og for hvert tal fra 2 til kvadratroden af โโdette tal skal vi kontrollere, om det er deleligt ved at udskrive alle forekomster af denne faktor.
#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;
}
Output:
Enter the number you want: 2 2
C Prime Factors-program ved hjรฆlp af rekursion
Dette er den samme lรธsning som den rekursive python, men skrevet i C.
Vi kan bede brugeren om at indtaste nummeret; derefter bygger vi primtal-arrayet, der gemmer den mindste primfaktor af hvert tal. Til sidst kalder vi Prime Factors for rekursiv funktion, som dividerer det givne tal med sin mindste primfaktor og genkalder sig selv, indtil man nรฅr รฉn.
#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;
}
Output:
Enter the number you want: 2 2
Nogle interessante fakta om primtal
- En af de mest interessante fakta er, at ethvert lige tal bortset fra 2 kan vรฆre summen af โโto primtal.
- For eksempel: 4 = 2 + 2, 6 = 3 + 3, 8 = 5 + 3 โฆ osv.
- En anden kendsgerning er, at der ikke er andre pรฅ hinanden fรธlgende primtal end 2 og 3, da det eneste lige primtal er tallet 2.
- Desuden kan alle primtal undtagen 2 og 3 skrives i fรธlgende form: 6 * n + 1 eller 6 * n โ 1, hvor n er et positivt heltal.
- Sรฆttet af primfaktorer for et tal er unikt.
- Nummer 1 er hverken primtal eller sammensat.
- Primfaktorisering af tal kan hjรฆlpe med at lรธse problemer som delelighed, forenkling af brรธker og at finde fรฆllesnรฆvnere for forskellige brรธker.
- En af de spรฆndende anvendelser af primfaktorisering er ogsรฅ at bryde hemmelige koder, der er talbaserede.

