Fermats faktoriseringsmetod är en algoritm för att faktorisera (faktorera) ett udda heltal , föreslagen av Pierre Fermat ( 1601 - 1665 ) 1643 .
Metoden bygger på att söka efter sådana heltal och som uppfyller relationen , vilket leder till en nedbrytning av .
I början av 1600-talet i Frankrike började matematiska idéer aktivt spridas bland vetenskapsmän genom korrespondens. 1638 gick Pierre Fermat med i kretsen av korrespondentforskare . Korrespondens var ett bekvämt sätt att kommunicera, eftersom Fermat bodde i Toulouse och många av hans bekanta forskare bodde i Paris . En av dessa forskare var Maren Mersenne , som var engagerad i distribution av brev, vidarebefordran och kommunikation av många forskare sinsemellan. Den 26 december 1638 nämnde Fermat i ett brev till Mersenne att han hade hittat en metod med vilken man kunde hitta delare av positiva tal, men han utelämnade alla detaljer och en beskrivning av metoden. Vid den tiden korresponderade Mersenne också med den franske matematikern Bernard Frenicle de Bessy , som, liksom Fermat, var engagerad i talteori , i synnerhet delare av naturliga tal och perfekta tal . I början av 1640 , efter att ha fått veta att Fermat hade fått en metod för att hitta divisorer, skrev Frenicle till Mersenne, som vidarebefordrade Fermats brev. Mersenne var under lång tid länken mellan de två matematikerna i deras korrespondens. Det var i breven till Frenicle som Fermat kunde bevisa riktigheten av faktoriseringsmetoden, samt för första gången formulera och motivera huvudbestämmelserna i satsen, som senare kallades Fermats lilla sats [1] [2 ] .
Fermats metod är baserad på satsen om representationen av ett tal som skillnaden mellan två kvadrater :
Om det är udda, så finns det en en-till-en-överensstämmelse mellan faktoriseringen och representationen som en skillnad av kvadrater med , givet av formlerna |
Om faktoriseringen ges , så gäller förhållandet: . Således erhålls en representation i form av en skillnad på två kvadrater.
Omvänt, om givet att , då kan höger sida faktoriseras: [3] .
För att faktorisera ett udda tal, söks efter ett par tal så att , eller . I det här fallet är siffrorna och divisorer , möjligen triviala (det vill säga en av dem är lika med 1 och den andra är lika med ).
I det icke-triviala fallet är likhet likvärdig med , det vill säga vad som är en kvadrat .
Sökandet efter en kvadrat av detta slag börjar med - det minsta talet för vilket skillnaden är icke-negativ.
För varje värde som börjar från , beräkna och kontrollera om detta tal inte är en exakt kvadrat. Om inte, öka med en och gå till nästa iteration.
Om är en exakt kvadrat, det vill säga så erhålls expansionen:
vart i
Om det är trivialt och unikt, så är det enkelt.
I praktiken beräknas uttryckets värde i det -th steget med hänsyn till värdet i det -th steget:
var
Låt oss ta ett nummer . Beräkna för vi kommer att beräkna värdena för funktionen . För ytterligare enkelhet kommer vi att konstruera en tabell som innehåller värdena och vid varje iterationssteg. Vi får:
ett | 363 | 19.052 |
2 | 576 | 24 |
Som framgår av tabellen erhölls redan vid det andra iterationssteget ett heltalsvärde .
Följande uttryck äger alltså rum: . Därav följer det
Låt Då eller
77 | 52374 | 228,854 |
78 | 53129 | 230,497 |
79 | 53886 | 232.134 |
80 | 54645 | 233,763 |
81 | 55406 | 235,385 |
82 | 56169 | 237 |
Denna expansion är inte ändlig, eftersom talet uppenbarligen inte är primtal:
Som ett resultat, den slutliga nedbrytningen av det ursprungliga numret till produkten av primtalsfaktorer
Den största effektiviteten av beräkningen med Fermat-faktoriseringsmetoden uppnås när talets faktorer är ungefär lika med varandra. Detta ger en relativt kort sekvenssökning [4]
I värsta fall, när till exempel nära a är nära 1, presterar Fermats algoritm sämre än divisorsökmetoden . Antal iterationer för ett givet fall
det vill säga det är uppenbart att den har ordningen
Fermats faktoriseringsmetod kommer att fungera lika bra som divisoruppräkningsmetoden om det är möjligt att få en uppskattning för en större divisor härifrån.Därför har Fermats metod en exponentiell skattning och är som en försöksdivisionsmetod inte lämplig för att bryta ner stora tal . Du kan förbättra effektiviteten om du först försöker dividera ett tal med tal från 2 till någon konstant B och sedan söka efter divisorer med Fermats metod. En sådan kampanj hjälper till att bli av med små delare av antalet [5] .
Anta att vi försöker faktorisera talet n = 2345678917 med Fermats metod, men förutom b beräknar vi även a − b . Börjar med kan man skriva:
a | 48 433 | 48 434 | 48 435 | 48 436 |
---|---|---|---|---|
b 2 | 76 572 | 173 439 | 270 308 | 367 179 |
b | 276,7 | 416,5 | 519,9 | 605,9 |
a - b | 48 156,3 | 48 017,5 | 47 915,1 | 47 830,1 |
Om vi nu började använda divisoruppräkningsmetoden för att dekomponera ett tal , då skulle det vara vettigt att kontrollera divisorer endast upp till 47 830, och inte upp till 48 432, eftersom om det fanns en större divisor, så skulle den hittas med Fermats metod . Så, i bara fyra steg, kontrollerade Fermats metod alla divisorer från 47 830 till 48 432.
Det är alltså möjligt att kombinera Fermats metod med divisoruppräkningsmetoden. Det räcker med att välja ett tal och använda Fermat-metoden för att kontrollera divisorerna mellan och , och de återstående divisorerna kan kontrolleras genom att räkna upp divisorerna, och divisorer behöver endast kontrolleras upp till talet [6] .
I exemplet ovan, när , måste divisorerna itereras upp till talet 47830. Du kan också till exempel välja talet som ger gränsen 28937.
Kombinationen av metoder är bra, för med en tillräcklig skillnad mellan ett tals divisorer är metoden för uppräkning av divisorer mer effektiv än Fermats metod [5] . Detta illustreras av följande exempel:
a | 60 001 | 60 002 |
---|---|---|
b 2 | 1 254 441 084 | 1 254 561 087 |
b | 35 418,1 | 35 419,8 |
a - b | 24 582,9 | 24 582,2 |
När du letar efter kvadraten av ett naturligt tal i en talföljd behöver du inte beräkna kvadratroten av varje värde i den sekvensen, eller ens kontrollera alla möjliga värden för en . Tänk till exempel på ett nummer :
a | 48 433 | 48 434 | 48 435 | 48 436 |
---|---|---|---|---|
b 2 | 76 572 | 173 439 | 270 308 | 367 179 |
b | 276,7 | 416,5 | 519,9 | 605,9 |
Du kan omedelbart, utan att beräkna kvadratroten, säga att inget av värdena i tabellen är en kvadrat. Det räcker till exempel att använda det faktum att alla kvadrater av naturliga tal tagna modulo 20 är lika med ett av följande värden: 0, 1, 4, 5, 9, 16. Dessa värden upprepas för varje ökning av a med 10. I moduloexemplet 20 får vi därför, genom att subtrahera 17 (eller lägga till 3), att talet modulo 20 är lika med något av följande: 3, 4, 7, 8, 12, 19. Men eftersom är ett naturligt tal, härifrån får vi att modulo 20 bara kan vara lika med 4. Därför modulo 20 och eller modulo 10. Du kan alltså kontrollera roten av uttrycket inte för alla utan bara för de som slutar på 1 eller 9 [6] .
På liknande sätt kan alla potenser av olika primtal användas som modul. Om vi till exempel tar samma nummer hittar vi
Modulo 16: | rutor är lika | 0, 1, 4 eller 9 |
n mod 16 är lika med | 5 | |
därför lika | 9 | |
och ett är | 3, 5, 11 eller 13 modulo 16 | |
Modul 9: | rutor är lika | 0, 1, 4 eller 7 |
n mod 9 är lika med | 7 | |
därför lika | 7 | |
och ett är | 4 eller 5 modulo 9 |
Fermats metod fungerar bra när talet har en faktor som är ungefär lika med kvadratroten av [5] .
Om du känner till det ungefärliga förhållandet mellan talets faktorer kan du välja ett rationellt tal som är ungefär lika med detta förhållande. Då kan vi skriva följande likhet: , där faktorerna och är nära på grund av de antaganden som gjorts. Därför kan de snabbt hittas genom att använda Fermats metod för att utöka antalet . Vidare, för att hitta och, kan du använda likheterna och (om det inte är delbart med och inte är delbart med ).
I allmänhet, när förhållandet mellan faktorerna inte är känt, kan man försöka använda olika förhållanden och försöka utöka det resulterande talet . En algoritm baserad på denna metod föreslogs först av den amerikanske matematikern Sherman Lehman 1974 [7] och kallas Lehman-metoden . Algoritmen faktoriserar deterministiskt ett givet naturligt tal i aritmetiska operationer [8] , men för närvarande är den endast av historiskt intresse och används nästan aldrig i praktiken [9] .
En generalisering av Fermats metod föreslogs av Maurice Krajczyk 1926. Han föreslog att istället för par av nummer som uppfyller relationen , leta efter par av nummer som uppfyller en mer allmän jämförelse. En sådan jämförelse kan hittas genom att multiplicera flera jämförelser av formen , där är små tal, vars produkter kommer att vara en kvadrat. För att göra detta kan vi överväga par av nummer , där är ett heltal något större än , och . Krajczyk märkte att många av de siffror som erhålls på detta sätt bryts ner i små primtalsfaktorer, det vill säga talen är jämna [10] .
Handlingssekvensen enligt Krajcik [11]Med Krajczyk-Farm-metoden bryter vi ner talet. Talet är det första vars kvadrat är större än talet :
Beräkna värdet på funktionen för alla Vi får
Enligt Fermats metod skulle det vara nödvändigt att fortsätta beräkningarna tills kvadraten på något tal hittades. Enligt Krajczyk-Fermat-metoden, då är det nödvändigt att successivt söka efter de som Då
Det följer av Krajczyk-Fermat-algoritmen att alla resulterande siffror lätt kan faktoriseras.
Verkligen:
Uppenbarligen kommer produkten av de fyra erhållna talen att vara en kvadrat: Då kan vi nu räkna
Därefter, med hjälp av Euklids algoritm, hittar vi .
På det här sättet,
År 1981 publicerade matematikern John Dixon från Carleton University sin egen faktoriseringsmetod baserad på Krajczyks idéer [13] [14] [15] [16] .
Dixons algoritm bygger på konceptet faktorbaser och är en generalisering av Fermats faktoriseringsalgoritm. I algoritmen, istället för par av siffror som uppfyller ekvationen, söks efter siffror som uppfyller en mer allmän ekvation , för vilken lösning Krajczyk märkte flera användbara fakta. Algoritmens beräkningskomplexitet [17]
var
Idén med Fermats faktoriseringsmetod ligger till grund för några av de snabbaste algoritmerna för faktorisering av stora semiprimtal - den kvadratiska siktmetoden och den allmänna talfältssiktmetoden . Den största skillnaden mellan den kvadratiska sållmetoden och Fermats metod är att istället för att söka efter en kvadrat innehåller sekvensen par av sådana tal vars kvadrater är lika i absolut värde (vart och ett av dessa par kan vara en nedbrytning av ett tal ). Sedan, bland de hittade nummerparen, söks paret efter, vilket är expansionen av talet . [arton]
En utveckling av Fermats faktoriseringsmetod är Shanks metod för kvadratiska former (även känd som SQUFOF), baserad på tillämpningen av kvadratiska former . Intressant nog, för 32-bitars datorer, är algoritmer baserade på denna metod de obestridda ledarna bland faktoriseringsalgoritmer för tal från till [19] .
Fermats faktoriseringsalgoritm kan tillämpas på RSA-krypteringsanalys . Om slumptal vars produkt är lika med ligger nära varandra, så kan de hittas med Fermats faktoriseringsmetod. Sedan kan du hitta den hemliga exponenten och därmed knäcka RSA [20] [21] . Vid tidpunkten för publiceringen av RSA-algoritmen var endast ett litet antal faktoriseringsalgoritmer kända, varav den mest kända var Fermats metod.
Den välkände engelske ekonomen och logistikern W. S. Jevons gjorde följande antagande i sin bok The Principles of Science ( 1874 ) [22] :
Med två siffror kan du hitta deras produkt på ett enkelt och tillförlitligt sätt, men det är en helt annan sak när du behöver hitta dess faktorer för ett stort antal. Kan du säga vilka två tal som multipliceras för att göra 8616460799 ? Jag tror inte att någon annan än jag vet detta.
Intressant nog kan siffran som anges av Jevons dekomponeras manuellt med Fermats metod med siktmetoden på cirka 10 minuter. Verkligen ,. Med hjälp av silmetoden kan man snabbt komma fram till relationen
Sålunda har nedbrytningen till primtalsfaktorer formen .
Jevons huvudidé om komplexiteten i att sönderdela tal i primtal i jämförelse med deras multiplikation är giltig, men bara när det kommer till produkten av tal som inte är så nära varandra [23] .
Talteoretiska algoritmer | |
---|---|
Enkelhetstest | |
Hitta primtal | |
Faktorisering | |
Diskret logaritm | |
Hitta GCD | |
Modulo aritmetik | |
Multiplikation och division av tal | |
Beräkna kvadratroten |