Il metodo delle basi di fattorizzazione di Kraitchik

Il metodo di fattorizzazione di Kraitchik cerca due numeri interi distinti \( x \ne y \) tali che \(x^2>n \) e \( x^2 \equiv y^2 \pmod{n} \). Una volta trovata questa coppia di interi, calcola il massimo comune divisore tra \( n \) e \( x - y \) (o \( x + y \)) per ottenere un fattore non banale di \( n \).

Come funziona?

Ecco la procedura da seguire per fattorizzare il numero $ n $:

  1. Scelgo il minimo valore di \( x \) tale che \( x^2 > n \)
  2. Trovo un intero \( y \) tale che \( x^2 \equiv y^2 \pmod{n} \) cioè i due quadrati devono essere congruenti modulo \( n \)
  3. Calcola \( x - y \) e \( x + y \)
  4. Determina il massimo comune divisore (MCD) tra \( n \) e uno di questi valori: \[ MCD(n, x - y) \quad \text{oppure} \quad MCD(n, x + y) \]
  5. Se il MCD trovato è un fattore non banale di \( n \) (cioè non 1 o \( n \)), allora ho ottenuto il primo fattore del numero. Per trovare gli altri basta dividere $ n $ per il fattore appena trovato.
  6. Se il fattore trovato non è primo, continuo a scomporlo ulteriormente fino ad arrivare ai fattori primi.

Questa sequenza di passi permette di trovare una scomposizione di \( n \) in fattori primi.

Nota. E una generalizzazione del metodo di Fermat che anziché risolvere direttamente \( x^2 - y^2 = n \) si basa sull'equivalenza \( x^2 \equiv y^2 \pmod{n} \) ossia \( x^2 - y^2 \equiv 0 \pmod{n} \). Perché \( x^2 - y^2 \) si può riscrivere come \( (x - y)(x + y) \). Se trovo due numeri \( x \) e \( y \) distinti tra loro \( x \ne y \) tali che questa relazione sia valida modulo \( n \), allora \( n \) deve dividere il prodotto \( (x-y)(x+y) \). Questo significa che i fattori primi di \( n \) devono essere contenuti in \( x-y \) oppure in \( x+y \).

Un esempio pratico

Voglio trovare i fattori primi di \( n = 1001 \) usando il metodo di Kraitchik.

Trovo due numeri \( x \) e \( y \) tali che

$$ x^2 \equiv y^2 \pmod{1001} $$

La radice quadrata di $ n=1001 $ è $ 31.6 $

$$ \sqrt{1001} \approx 31.6 $$

Quindi, devo cercare i valori interi a partire da $ x>31 $.

Ad esempio, il quadrato di $ x=71 $ ha come resto $ 36 $ nel modulo 1001 che è un quadrato perfetto ( $ \sqrt{36} = 6 $ ).

\[ 71^2 \equiv 36 \pmod{1001} \]

Come trovare i valori x e y? Per trovare i valori migliori di x e y posso cercare la base di fattorizzazione migliore. Rimando questa spiegazione al paragrafo seguente. Per il momento considero validi i valori x=71 e y=6 perché so già che sono validi. In questo modo posso spiegare meglio come funziona il metodo di Kraitchik.

Poiché \( 36 = 6^2 \) è un quadrato perfetto posso scegliere $ x $ e $ y $ in questo modo:

$$ x = 71 $$

$$ y = 6 $$

Questi valori soddisfano l'equivalenza del metodo

\[ x^2 \equiv y^2 \pmod{1001} \]

A questo punto posso calcolare il massimo comune divisore \( MCD(n, x - y) \):

\[ x - y = 71 - 6 = 65 \]

Trovo \( MCD(65, 1001) \) con l'algoritmo euclideo:

\[ 1001 = 65 \times 15 + 26 \]

\[ 65 = 26 \times 2 + 13 \]

\[ 26 = 13 \times 2 + 0 \]

L'ultimo resto non nullo è 13, quindi \( MCD(65, 1001) = 13 \), che è anche un fattore non banale di 1001.

\[ \frac{1001}{13} = 77 \]

Poiché \( 77 \) è un fattore composto, posso ulteriormente scomporlo.

\[ 77 = 7 \times 11 \]

Quindi la fattorizzazione completa è:

\[ 1001 = 13 \times 7 \times 11 \]

Nota. Anziché usare $ x-y $ avrei potuto usare anche $ x+y $. Ad esempio, con $ x=71 $ e $ y=6 $ $$ x+y= 71+6 = 77 $$ Una volta trovato il valore calcolo il MCD tra $ 77 $ e $ 1001 $. $$ MCD(77, 1001) = 11 $$ Ho così trovato il primo fattore non banale (ossia diverso da 1 e 1001) che in questo caso è $ 11 $. Per trovare gli altri non devo far altro che dividere il numero che voglio fattorizzare $ n=1001 $ per il fattore che ho appena trovato ( $ 11 $ ). $$ \frac{1001}{11} = 91 $$ Poiché che \( 91 \) è un fattore composto, posso ulteriormente scomporlo in fattori primi $ 91 = 7 \times 13 $  Quindi la fattorizzazione completa è: \[ 1001 = 13 \times 7 \times 11 \] Il risultato finale è sempre lo stesso.

Come trovare x e y con le basi di fattorizzazione

Per trovare la base di fattorizzazione posso usare la formula:

\[ b_k = \lfloor \sqrt{n \cdot k} \rfloor + 1, \quad k = 1, 2, 3, \dots \]

Questa formula genera alcuni valori di \( b_k \) da testare con il calcolo del quadrato modulo \( n \):

\[ b_k^2 \mod n \]

Una volta calcolato il quadrato, tenta di scomporre \( b_k^2 \mod n \) in fattori primi.

Se \( b_k^2 \mod n \) è un quadrato perfetto posso applicare il metodo di fattorizzazione di Kraitchik assegnando $ x=b_k $ e $ y= \sqrt{ b_k^2 \mod n } $.

E se non trovo un quadrato perfetto? Se non trovo un quadrato perfetto direttamente tra i valori di \( b_k^2 \mod n \), devo combinare più valori per ottenerlo,  usando il metodo della riduzione modulo 2 sui \( B \)-vettori.

  1. Genera più valori \( b_k \) usando la formula: \[ b_k = \lfloor \sqrt{n \cdot k} \rfloor + 1 \]
  2. Calcola \( b_k^2 \mod n \).
  3. Scompongo ogni \( b_k^2 \mod n \) in fattori primi.
  4. Seleziono una base \( B = \{p_1, p_2, \dots\} \) contenente solo i primi più piccoli.
  5. Costruisco i \( B \)-vettori e li riduco modulo 2. In altre parole, un esponente è pari lo sostituisco con 0, se è dispari con 1
  6. Trovo una combinazione di vettori che si sommano a zero modulo 2.  Se li trovo, vuol dire che il prodotto dei numeri corrispondenti è un quadrato perfetto.
  7. Una volta ottenuto un quadrato modulo \( n \), calcola il massimo comune divisore \( MCD(n, b - c) \)
  8. Se il risultato è un fattore non banale di \( n \), ho trovato un fattore del numero. Se invece ottengo \( n \) o \( 1 \), ovvero dei fattori banali, devo riprovare con altre combinazioni.

Esempio

Considero il numero \( n = 1001 \) da fattorizzare.

La prima base da tentare con \( k = 1 \) è la seguente:

\[ b_1 = \lfloor \sqrt{1001 \cdot 1} \rfloor + 1 = 32 \]

Poi calcolo il quadrato $ b_1 $ nel modulo $ n=1001 $.

\[ 32^2 \equiv 23 \pmod{1001} \]

La scomposizione in fattori primi di $ 23 $ è sempre $ 23^1  $ perché è un fattore primo. Non è un quadrato perfetto.

Quindi passo a calcolare la base successiva con \( k=2 \)

\[ b_2 = \lfloor \sqrt{1001 \cdot 2} \rfloor + 1 = 45 \]

Calcolo il quadrato $ b_1 $ nel modulo $ n=1001 $.

\[ 45^2 \equiv 23 \pmod{1001} \]

Il risultato è ancora $ 23^1 $ che non è un quadrato perfetto.

Calcolo la base successiva con \( k=3 \)

\[ b_3 = \lfloor \sqrt{1001 \cdot 3} \rfloor + 1 = 55 \]

Verifico se è un quadrato perfetto

\[ 55^2 \equiv 22 \pmod{1001} \]

La scomposizione in fattori primi di $ 22 $ è $ 2^1 \cdot 11^1  $.

Calcolo la base successiva con \( k=4 \)

\[ b_4 = \lfloor \sqrt{1001 \cdot 4} \rfloor + 1 = 64 \]

\[ 64^2 \equiv 92 \pmod{1001} \]

La scomposizione in fattori primi di $ 92 $ è $ 2^2 \cdot 23^1  $.

Calcolo la base successiva con \( k=5 \)

\[ b_5 = \lfloor \sqrt{1001 \cdot 5} \rfloor + 1 = 71 \]

\[ 71^2 \equiv 36 \pmod{1001} \]

La scomposizione in fattori primi di $ 36 $ è $ 3^2 \times 2^2 = (3 \times 2)^2 = 6^2  $ ed è un quadrato perfetto.

Quando $ b_i $ è un quadrato perfetto, posso direttamente applicare il metodo di Kraitchik usando $ x=71 $ e $ y = 6 $

Calcolo la differenza $ x-y $

\[ x - y = 71 - 6 = 65 \]

Poi trovo \( MCD(n, x - y) \):

\[ MCD(1001, 65) = 13 \]

Il risultato è un fattore di $ n = 1001 $,  Per trovare gli altri posso dividere il numero per il fattore appena trovato.

\[ \frac{1001}{13} = 77 = 7 \times 11 \]

Pertanto, i fattori primi del numero sono:

\[ 1001 = 13 \times 7 \times 11 \]

Esempio 2

Mettiamo che non trovi un quadrato perfetto, cosa posso fare? In questo caso devo costruire i B-vettori di ciascun tentativo.

Ad esempio, voglio fattorizzare il numero $ n =2183 $

bk bk2 mod 2183 Fattorizzazione B-vettore B-vettore ridotto modulo 2
47 26 21 × 131    
67 123 31 × 411    
81 12 22 × 31    
94 104 23 × 131    
105 110 21 × 51 × 111    
124 95 51 × 191    
133 225 32 × 52    
141 234 21 × 32 × 131    
148 74 21 × 371    
155 12 22 × 31    
162 48 24 × 31    
169 182 21 × 71 × 131    
175 63 32 × 71    
181 16 24    

L'ultimo valore trovato è un quadrato perfetto (bk=181) perché $ 181^1 \equiv 16 \mod 2183 $. Quindi, potrei usarlo direttamente col metodo di Kraitchik.

Esempio. Una volta trovato il quadrato perfetto, posso assegnare $ x=181 $ e $ y = \sqrt{16}=4 $ e risolvere il problema. Calcolo la differenza: \[ x - y = 181 - 4 = 177 \] Poi trovo \( MCD(n, x - y) \):  \[ MCD(2183, 177) = 59 \] Ho trovato il primo fattore di 2183. Per trovare anche l'altro divido 2183 per 59. \[ \frac{2183}{59} = 77 = 7 \times 37 \] Quindi, la fattorizzazione del numero è $ 2183 = 37 \times 59 $

Tuttavia, in questo esempio voglio dimostrare che si può costruire indirettamente un quadrato perfetto anche usando le varie combinazioni degli altri valori bk.

Questa procedura è molto utile quando non si trova direttamente un quadrato perfetto.

Per prima cosa noto che molti numeri hanno come fattori primi più piccoli 2 e 3. Quindi uso come base di fattorizzazione B(2,3).

Generalmente è sempre preferibile iniziare a usare i fattori più piccoli e ampliare la base man mano che si procede.

Poi calcolo i B-vettori modulo 2 dei valori bk che hanno solo 2 e/o 3 come fattori primi, escludendo gli altri.

bk bk2 mod 2183 Fattorizzazione B-vettore B-vettore ridotto modulo 2
47 26 21 × 131    
67 123 31 × 411    
81 12 22 × 31 (22 , 31) (0 , 1)
94 104 23 × 131    
105 110 21 × 51 × 111    
124 95 51 × 191    
133 225 32 × 52    
141 234 21 × 32 × 131    
148 74 21 × 371    
155 12 22 × 31 (22 , 31 (0 , 1)
162 48 24 × 31 (24 , 31 (0 , 1)
169 182 21 × 71 × 131    
175 63 32 × 71    
181 16 24 (24 , 30) (0 , 0)

A questo punto cerco una combinazione dei vettori che si sommano a (0,0) modulo 2.

Esempio. Un quadrato perfetto come $ b=181 $ ha già un vettore composto solo da zeri (0,0) nella base B(2,3). Tuttavia, in questo caso, voglio usare una combinazione alternativa di bk. Quindi, non lo considero.

Ad esempio, prendo i B-vettori dei valori 81 e 155 perché la loro somma vettoriale è nulla nel modulo 2.

$$ (0,1)_{81} + (0,1)_{155} \mod 2 = (0+0, 1+1)= (0,0) $$

Il prodotto corrispondente di questi valori (81×155) nel modulo 2 è 1640

$$ 81 \cdot 155 = 12555 \equiv 1640 \pmod{2183} $$

Il quadrato di $ 1640^2 \mod 2183 $ è un quadrato perfetto (144=122)

$$ 1640^2 \equiv 144 \mod 2183 $$

Nota. Del resto bastava osservare che sia il quadrato 812 e di 1552 sono entrambi equivalente a 12 nel modulo 2183. $$ 12 \cdot 12= ( 2^2 \times 3^1 ) \times ( 2^2 \times 3^1 ) = 2^4 \times 3^2 = 144 $$

Pertanto, posso provare a usare $ x=1640 $ e $ y= \sqrt{144} = 12 $ nel metodo di fattorizzazione

\[ MCD(2183, 1640-12) = MCD(2183, 1628) = 37 \]

In questo modo trovo un fattore primo del numero 2183 ossia 37.

Per trovare gli altri, mi basta dividere 2183 per 37

\[ \frac{2183}{37} = 59 \]

Quindi, la fattorizzazione del numero è

$$ 2183 = 37 \times 59 $$

Ho raggiunto lo stesso risultato ma in modo indiretto.

Cosa fare se non riesco a trovare un fattore non banale? In questi casi devo cercare un'altra combinazione di B-vettori ridotti al modulo 2. Eventualmente, se dopo aver analizzato molte combinazioni non trovo una soluzione, posso provare a generare altri numeri bk. Se necessario, posso anche modificare la base di fattorizzazione B, includendo un altro numero primo.

Note

Alcune note e osservazioni su questo metodo.

  • Il metodo di Kraitchik fallisce se x ±y mod n
    Può accadere che tutti i fattori primi di \( n \) dividono solo uno dei due termini \( x - y \) oppure \( x + y \). Se questo accade, significa che: \[ x \equiv \pm y \pmod{n} \] In questo caso, il metodo non fornisce alcuna informazione utile per la fattorizzazione, e devo cercare un'altra coppia di valori \( x, y \). Ad esempio, considero il numero composto \( 91 = 7 \times 13 \) e applico il metodo di Kraitchik dovrebbe trovare i suoi fattori primi. La coppia di interi \( x = 46, \quad y = 45 \)  soddisfa la relazione \[ 46^2 \equiv 45^2 \pmod{91} \] Tuttavia, in questo caso si verifica il problema perché \[ 46 \equiv -45 \pmod{91} \] Poiché \( x \equiv -y \pmod{91} \), il metodo non mi aiuta a trovare un fattore di 91, perché restituisce solo fattori banali. \[ x - y = 46 - 45 = 1 \] Il MCD(91,1)=1 è un fattore banale di 91.

    Come evitare il problema? Nella scelta dei valori $ x $ e $ y $, per trovare un fattore non banale di \( n \) è necessario soddisfare anche la condizione \[ x \not\equiv \pm y \pmod{n} \] In questo modo, almeno un fattore primo di \( n \) divide \( x - y \) e almeno un altro divide \( x + y \). Questa osservazione è fondamentale per applicare correttamente il metodo di Kraitchik.

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Fattorizzazione

Calcolatrice