Williams p + 1 algoritm

I beräkningstalteorin är Williams p + 1 algoritm en heltalsfaktoriseringsalgoritm , en av familjen av algebraiska gruppfaktoriseringsalgoritmer . Den uppfanns av Hugh C. Williams 1982.

Det fungerar bra om talet N som ska faktoriseras innehåller en eller flera primtalsfaktorer p så att p + 1 är jämnt , dvs p + 1 innehåller bara små faktorer. Den använder Lucas-sekvenser för att utföra exponentiering i ett kvadratiskt fält .

Det är analogt med Pollards p − 1 algoritm .

Algoritm

Välj något heltal A större än 2 som kännetecknar Lucas-sekvensen :

där alla operationer utförs modulo N .

delar alla udda primtal p när M är en multipel av , där och är Jacobi-symbolen .

Vi kräver att det vill säga D ska vara en kvadratisk icke-rester modulo p . Men eftersom vi inte vet p i förväg, kan mer än ett värde på A behövas innan man hittar en lösning. Om urartar denna algoritm till en långsam version av Pollards p − 1 algoritm .

Så för olika värden på M beräknar vi och när resultatet inte är lika med 1 eller N , har vi hittade en icke-trivial faktor av N .

Värdena på M används är successiva faktorialer, och är det M -:te värdet av sekvensen som kännetecknas av .

För att hitta det M -:te elementet V i sekvensen som kännetecknas av B , fortsätter vi på ett sätt som liknar vänster-till-höger-exponentiering:

     x := B y := (B ^ 2 − 2) mod N  för varje  bit av  M  till höger om den mest signifikanta biten  gör  om  biten är 1  x := (x × y − B) mod N y : = (y ^ 2 − 2) mod N  annars  y := (x × y − B) mod N x := (x ^ 2 − 2) mod NV := x 

Exempel

Med N =112729 och A =5 är successiva värden för

V 1 av följande(5) = V 1! av seq(5) = 5
V 2 av seq(5) = V 2! av seq(5) = 23
V 3 av seq(23) = V 3! av sekv(5) = 12098
V4 av sekv(12098) = V4 ! av seq(5) = 87680
V 5 av seq(87680) = V 5! av seq(5) = 53242
V 6 av seq(53242) = V 6! av sekv(5) = 27666
V7 av sekv(27666) = V7 ! av seq(5) = 110229.

Vid denna tidpunkt är gcd(110229-2,112729) = 139, så 139 är en icke-trivial faktor på 112729. Lägg märke till att p+1 = 140 = 2 2 × 5 × 7. Talet 7! är den lägsta faktorn som är multipel av 140, så den korrekta faktorn 139 hittas i detta steg.

Med ett annat initialvärde, säg A = 9, får vi:

V 1 av följande(9) = V 1! av seq(9) = 9
V 2 av seq(9) = V 2! av sekv(9) = 79
V3 av sekv(79) = V3 ! av seq(9) = 41886
V 4 av seq(41886) = V 4! av seq(9) = 79378
V 5 av seq(79378) = V 5! av seq(9) = 1934
V 6 av seq(1934) = V 6! av sekv(9) = 10582
V7 av sekv(10582) = V7 ! av seq(9) = 84241
V 8 av seq(84241) = V 8! av sekv(9) = 93973
V9 av sekv(93973) = V9 ! av seq(9) = 91645.

Vid denna tidpunkt är gcd(91645-2,112729) = 811, så 811 är en icke-trivial faktor på 112729. Lägg märke till att p−1 = 810 = 2 × 5 × 3 4 . Siffran 9! är den lägsta faktorn som är multipel av 810, så den korrekta faktorn 811 hittas i detta steg. Faktorn 139 hittas inte denna gång eftersom p−1 = 138 = 2 × 3 × 23 vilket inte är en divisor av 9!

Som kan ses i dessa exempel vet vi inte i förväg om det primtal som kommer att hittas har en jämn p+1 eller p−1.

Generalisering

Baserat på Pollards p − 1 och Williams p +1 faktoriseringsalgoritmer utvecklade Eric Bach och Jeffrey Shallit tekniker för att faktorisera n effektivt förutsatt att den har en primfaktor p så att varje k: te cyklotomiskt polynom Φ k ( p ) är jämnt . De första få cyklotomiska polynomen ges av sekvensen Φ 1 ( p ) = p −1, Φ 2 ( p ) = p +1, Φ 3 ( p ) = p 2 + p +1, och Φ 4 ( p ) = p 2 +1.

externa länkar