Primfaktor-Algorithmus: C, Python Beispiel

โšก Intelligente Zusammenfassung

Der Primfaktorzerlegungsalgorithmus zerlegt jede positive ganze Zahl in ein Produkt von Primzahlen, indem er eine Probedivision bis zur Quadratwurzel durchfรผhrt oder eine Variante des Siebs des Eratosthenes verwendet, die jeden kleinsten Primfaktor speichert.

  • ๐Ÿงฎ Definition: Die Primfaktoren einer ganzen Zahl sind die Primzahlen, deren Produkt gleich dieser Zahl ist; 10 lรคsst sich in 2 und 5 zerlegen.
  • ๐Ÿ” Prozessabteilung: Iterativ von 2 bis sqrt(n) und dividiert immer dann, wenn der Betrag null ist, benรถtigt man O(sqrt(n)) Zeit.
  • ๐Ÿงฐ Siebmethode: Durch das Speichern des kleinsten Primfaktors fรผr jeden Wert bis zu einer bestimmten Grenze reduziert sich die Faktorisierung auf etwa O(log n) pro Abfrage.
  • ๐Ÿ Python Code: Iterativ und rekursiv Python Die Implementierungen geben jeden Primfaktor einer eingegebenen Zahl aus.
  • ๐Ÿ’ป C Code: Vergleichende iterative und rekursive C-Programme demonstrieren die gleiche Logik unter Verwendung von stdio und einem vorab berechneten Array.
  • ๐Ÿ” Verwendung: Die Primfaktorzerlegung ermรถglicht Teilbarkeitsprรผfungen, Bruchvereinfachung, das Finden gemeinsamer Nenner und die Herstellung von kryptographischen Schlรผsseln auf Zahlenbasis.

Primfaktor-Algorithmus

Was ist eine Primfaktorzerlegung?

Der Primfaktor einer Zahl ist ein Faktor, der selbst ein Faktor ist. Primzahl, nur durch 1 und sich selbst teilbar.

Ejemplo: Die Primfaktoren von 10 sind 2 und 5, da 2 ร— 5 = 10.

Finden der Primfaktoren mithilfe der Iteration

Iteriere von 2 bis zur Quadratwurzel von n und prรผfe die Teilbarkeit. Solange n durch den aktuellen Kandidaten teilbar ist, dividiere und gib das Ergebnis aus.

Ejemplo: Jede Primzahl grรถรŸer als 40 passt in n2+n+41, also n = 0, 1, 2 ergibt 41, 43, 47.

Wie drucke ich einen Primfaktor einer Zahl aus?

  • Iteriere die Zahlen von 2 bis sqrt(n).
  • Prรผfen Sie den Betrag von n fรผr jeden Kandidaten; ein Rest von Null bedeutet, dass der Kandidat ein Primfaktor ist.
  • Sammle alle Primzahlen, die n teilen.
  • Die Routine hat eine Zeitkomplexitรคt von O(sqrt(n)).

Algorithmus:

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

Sieb-Algorithmus

Das Siebverfahren speichert den kleinsten Primfaktor jeder Zahl bis zu einer maximalen Grenze und reduziert so die Faktorisierungskosten nach der Vorberechnung erheblich.

  • Notieren Sie den kleinsten Primfaktor jeder ganzen Zahl bis zum maximalen Grenzwert.
  • Nimm die kleinste Primzahl und fรผge sie der Faktorenmenge hinzu.
  • Teile die Zahl durch diese Primzahl und wiederhole dies, bis das Ergebnis 1 ist.
  • Jede Abfrage hat eine Laufzeit von etwa O(log n).

Ejemplo: Eine Primzahl auรŸer 2 und 3 hat die Form 6n-1 oder 6n+1. Zum Beispiel: 5 = 6(1)-1 und 19 = 6(3)+1.

Algorithmus: definieren Sie Array speichert den kleinsten Primfaktor jeder Zahl, wobei der Index als Anfangswert fรผr jedes Element verwendet wird.

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]

ร„hnliche Artikel

Python Primfaktoren durch Iteration

Folgende Python Der Code ermittelt Primfaktoren mithilfe der iterativen Probedivisionsmethode:

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)

Ausgang:

Enter the number you want: 4
2
2

Python Primfaktoren durch Rekursion

Das Python Der unten stehende Code verwendet das Siebverfahren, um die Primfaktoren einer gegebenen Zahl zu finden.

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)

Ausgang:

Enter the number you want: 4
2
2

C-Primfaktorprogramm mit Iteration

Die gleiche iterative Lรถsung, geschrieben in C: Geben Sie eine Zahl ein, und prรผfen Sie dann fรผr jeden Kandidaten von 2 bis sqrt(n) die Teilbarkeit und geben Sie jedes Vorkommen eines Primfaktors aus.

#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;
}

Ausgang:

Enter the number you want: 2
2

C-Primfaktorprogramm mit Rekursion

C-Primfaktorprogramm mit Rekursion

Die rekursive C-Version spiegelt die Python eins: Erstelle ein Array der kleinsten Primfaktoren und teile dann rekursiv durch diesen Faktor, bis n den Wert 1 erreicht.

#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;
}

Ausgang:

Enter the number you want: 2
2

Einige interessante Fakten รผber Primzahlen

  • Jede gerade Zahl auรŸer 2 kann als Summe zweier Primzahlen geschrieben werden (4 = 2 + 2, 6 = 3 + 3, 8 = 5 + 3).
  • Es gibt keine aufeinanderfolgenden Primzahlen auรŸer 2 und 3, da 2 die einzige gerade Primzahl ist.
  • Alle Primzahlen auรŸer 2 und 3 haben die Form 6n + 1 oder 6n โˆ’ 1, wobei n eine positive ganze Zahl ist.
  • Die Menge der Primfaktoren einer Zahl ist eindeutig.
  • Die Zahl 1 ist weder eine Primzahl noch eine zusammengesetzte Zahl.
  • Die Primfaktorzerlegung hilft bei der Teilbarkeit, der Vereinfachung von Brรผchen und dem Finden gemeinsamer Nenner.
  • Die Primfaktorzerlegung ist auch die Grundlage zahlenbasierter kryptographischer Codes.

Hรคufig gestellte Fragen

Die Primfaktorzerlegung zerlegt eine ganze Zahl in ein Produkt von Primzahlen, zum Beispiel 12 = 2 ร— 2 ร— 3. Die Primfaktoren sind fรผr jede ganze Zahl grรถรŸer als eins eindeutig.

Wenn n einen Faktor grรถรŸer als โˆšn hat, ist sein Partner kleiner und wรคre bereits gefunden worden. Alles รผber โˆšn hinaus erfordert Wiederholung.

Die Probedivision hat eine Laufzeit von O(โˆšn). Das Sieb berechnet die kleinsten Primfaktoren in O(N log log N) vor und beantwortet dann jede Faktorisierung in etwa O(log n).

Verwenden Sie das Siebverfahren, um viele Zahlen innerhalb einer bekannten oberen Schranke zu faktorisieren. Eine Vorberechnung ermรถglicht es, jede nachfolgende Abfrage in etwa O(log n) auszufรผhren.

Nein. Die Zahl 1 ist weder eine Primzahl noch eine zusammengesetzte Zahl und kommt daher in keiner Primfaktorzerlegung vor. Zur Primfaktorzerlegung werden Primzahlen grรถรŸer oder gleich 2 verwendet.

Die Primfaktorzerlegung ist die Grundlage fรผr Teilbarkeitstests, Bruchrechnung, das kleinste gemeinsame Vielfache (kgV) und den grรถรŸten gemeinsamen Teiler (ggT) sowie fรผr Public-Key-Kryptographie wie RSA, wo die Faktorisierung eines groรŸen Produkts zweier Primzahlen schwierig ist.

KI-Systeme nutzen die Primfaktorzerlegung fรผr zahlentheoretische Merkmale, die Analyse kryptografischer Schlรผssel und sicheres fรถderiertes Lernen. Auch die Forschung im Bereich des Post-Quanten-ML befasst sich mit Faktorisierungsresistenz.

Ja. GitHub Copilot und รคhnliche KI-Assistenten automatisieren Standardcode fรผr Probedivisions- und Siebroutinen, allerdings รผberprรผfen die Entwickler weiterhin die Komplexitรคt und Grenzfรคlle wie n = 1.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: