Fermats faktoriseringsmetode er en algoritme til faktorisering (faktorering) af et ulige heltal , foreslået af Pierre Fermat ( 1601-1665 ) i 1643 .
Metoden er baseret på at søge efter sådanne heltal og som opfylder relationen , hvilket fører til en nedbrydning af .
I begyndelsen af det 17. århundrede i Frankrig begyndte matematiske ideer aktivt at spredes blandt videnskabsmænd gennem korrespondance. I 1638 sluttede Pierre Fermat sig til kredsen af korrespondentforskere . Korrespondance var en bekvem måde at kommunikere på, da Fermat boede i Toulouse , og mange af hans bekendte videnskabsmænd boede i Paris . En af disse videnskabsmænd var Maren Mersenne , som var engageret i uddeling af breve, videresendelse og kommunikation af mange videnskabsmænd indbyrdes. Den 26. december 1638 nævnte Fermat i et brev til Mersenne , at han havde fundet en metode, hvorved man kunne finde divisorer af positive tal, men han udelod alle detaljer og en beskrivelse af metoden. På det tidspunkt korresponderede Mersenne også med den franske matematiker Bernard Frenicle de Bessy , der ligesom Fermat var engageret i talteori , især divisorer af naturlige tal og perfekte tal . I begyndelsen af 1640 , efter at have erfaret, at Fermat havde modtaget en metode til at finde divisorer, skrev Frenicle til Mersenne, som videresendte Fermats brev. Mersenne var i lang tid bindeleddet mellem de to matematikere i deres korrespondance. Det var i brevene til Frenicle, at Fermat var i stand til at bevise rigtigheden af faktoriseringsmetoden, samt for første gang at formulere og begrunde hovedbestemmelserne i sætningen, som senere blev kaldt Fermats lille sætning [1] [2 ] .
Fermats metode er baseret på sætningen om repræsentationen af et tal som forskellen mellem to kvadrater :
Hvis ulige, så er der en en-til-en overensstemmelse mellem faktoriseringen og repræsentationen som en forskel af kvadrater med , givet af formlerne |
Hvis faktoriseringen er givet , så gælder forholdet: . Således opnås en repræsentation i form af en forskel på to kvadrater.
Omvendt, hvis givet det , så kan højre side faktoriseres: [3] .
For at faktorisere et ulige tal søges der efter et talpar, således at , eller . I dette tilfælde er tallene og divisorer , muligvis trivielle (det vil sige, en af dem er lig med 1, og den anden er lig ).
I det ikke-trivielle tilfælde svarer lighed til , altså til hvad der er en firkant .
Søgningen efter et kvadrat af denne art begynder med - det mindste tal, for hvilket forskellen er ikke-negativ.
For hver værdi, der starter fra , skal du beregne og kontrollere, om dette tal ikke er et nøjagtigt kvadrat. Hvis ikke, så øg med én og gå til næste iteration.
Hvis er et nøjagtigt kvadrat, det vil sige, så opnås udvidelsen:
hvori
Hvis det er trivielt og unikt, så er det enkelt.
I praksis beregnes værdien af udtrykket på -th trin under hensyntagen til værdien på -th step:
hvor
Lad os tage et nummer . Beregn For vil vi beregne værdierne af funktionen . For yderligere enkelhed vil vi konstruere en tabel, der vil indeholde værdierne og ved hvert iterationstrin. Vi får:
en | 363 | 19.052 |
2 | 576 | 24 |
Som det kan ses af tabellen, blev der allerede ved det andet iterationstrin opnået en heltalsværdi .
Således finder følgende udtryk sted: . Derfor følger det
Lad Så eller
77 | 52374 | 228.854 |
78 | 53129 | 230,497 |
79 | 53886 | 232.134 |
80 | 54645 | 233.763 |
81 | 55406 | 235.385 |
82 | 56169 | 237 |
Denne udvidelse er ikke endelig, da tallet naturligvis ikke er primtal:
Som et resultat, den endelige nedbrydning af det oprindelige tal til produktet af prime faktorer
Den største effektivitet af beregningen ved Fermat-faktoriseringsmetoden opnås, når faktorerne for tallet er omtrent lig med hinanden. Dette giver en relativt kort sekvenssøgning [4]
I værste fald, når for eksempel tæt på a er tæt på 1, klarer Fermats algoritme dårligere end divisor-søgemetoden . Antal iterationer for en given sag
det vil sige, at det er åbenlyst, at det har orden
Fermats faktoriseringsmetode vil fungere lige så godt som divisoropregningsmetoden, hvis det er muligt at få et estimat for en større divisor herfra . Derfor har Fermats metode et eksponentielt estimat og er som forsøgsdelingsmetode ikke egnet til at nedbryde store tal . Du kan forbedre effektiviteten, hvis du først prøver at dividere et tal med tal fra 2 til en konstant B og derefter søge efter divisorer ved hjælp af Fermats metode. En sådan kampagne hjælper med at slippe af med små divisorer af tallet [5] .
Antag, at vi forsøger at faktorisere tallet n = 2345678917 ved hjælp af Fermats metode, men udover b beregner vi også a − b . Startende med kan man skrive:
-en | 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 |
Hvis vi nu begyndte at bruge divisor-optællingsmetoden til at dekomponere et tal , så ville det give mening kun at kontrollere divisorer op til 47.830, og ikke op til 48.432, da hvis der var en større divisor, så ville den blive fundet ved Fermats metode . Så i kun fire trin kontrollerede Fermats metode alle divisorer fra 47.830 til 48.432.
Det er således muligt at kombinere Fermats metode med divisor optællingsmetoden. Det er nok at vælge et tal og bruge Fermat-metoden til at kontrollere divisorerne mellem og , og de resterende divisorer kan kontrolleres ved at optælle divisorerne, og divisorer skal kun kontrolleres op til tallet [6] .
I eksemplet ovenfor, når , skal divisorerne itereres op til tallet 47830. Du kan også f.eks. vælge det tal , der giver grænsen 28937.
Kombinationen af metoder er god, for med en tilstrækkelig forskel mellem divisorerne af et tal er metoden til opregning af divisorer mere effektiv end Fermats metode [5] . Dette illustreres af følgende eksempel:
-en | 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 leder efter kvadratet af et naturligt tal i en talfølge, behøver du ikke at beregne kvadratroden af hver værdi i den rækkefølge, eller endda kontrollere alle mulige værdier for en . Overvej for eksempel et tal :
-en | 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 med det samme, uden at beregne kvadratroden, sige, at ingen af værdierne i tabellen er en kvadrat. Det er f.eks. tilstrækkeligt at bruge det faktum, at alle kvadrater af naturlige tal taget modulo 20 er lig med en af følgende værdier: 0, 1, 4, 5, 9, 16. Disse værdier gentages for hver stigning i a med 10. I modulo-eksemplet 20 får vi derfor ved at trække 17 fra (eller lægge 3 sammen), at tallet modulo 20 er lig med en af følgende: 3, 4, 7, 8, 12, 19. Men da er et naturligt tal, herfra får vi at modulo 20 kun kan være lig med 4. Derfor modulo 20 og eller modulo 10. Du kan altså tjekke roden af udtrykket ikke for alle , men kun for dem der ender på 1 eller 9 [6] .
På samme måde kan enhver potens af forskellige primtal bruges som modul. For eksempel, hvis vi tager det samme tal , finder vi
Modul 16: | kvadrater er lige store | 0, 1, 4 eller 9 |
n mod 16 er lig | 5 | |
derfor lig | 9 | |
og en er | 3, 5, 11 eller 13 modulo 16 | |
Modul 9: | kvadrater er lige store | 0, 1, 4 eller 7 |
n mod 9 er lig med | 7 | |
derfor lig | 7 | |
og en er | 4 eller 5 modulo 9 |
Fermats metode fungerer godt, når tallet har en faktor, der er omtrent lig med kvadratroden af [5] .
Hvis du kender det omtrentlige forhold mellem tallets faktorer , kan du vælge et rationelt tal , der er omtrent lig med dette forhold. Så kan vi skrive følgende lighed: , hvor faktorerne og er tæt på grund af de antagelser, der er lavet. Ved at anvende Fermats metode til at udvide antallet kan de derfor hurtigt findes. Yderligere, for at finde og, kan du bruge lighederne og (i tilfælde af, at det ikke er deleligt med og ikke er deleligt med ).
Generelt, når forholdet mellem faktorerne ikke er kendt, kan man prøve at bruge forskellige forhold og forsøge at udvide det resulterende tal . En algoritme baseret på denne metode blev først foreslået af den amerikanske matematiker Sherman Lehman i 1974 [7] og kaldes Lehman-metoden . Algoritmen faktoriserer deterministisk et givet naturligt tal i aritmetiske operationer [8] , men i øjeblikket er den kun af historisk interesse og bruges næsten aldrig i praksis [9] .
En generalisering af Fermats metode blev foreslået af Maurice Krajczyk i 1926. Han foreslog at overveje i stedet for par af tal , der opfylder relationen , se efter par af tal, der opfylder en mere generel sammenligning. En sådan sammenligning kan findes ved at gange flere sammenligninger af formen , hvor er små tal, hvis produkter vil være en firkant. For at gøre dette kan vi overveje par af tal , hvor er et heltal lidt større end , og . Krajczyk bemærkede, at mange af tallene opnået på denne måde er opdelt i små primfaktorer, det vil sige, at tallene er jævne [10] .
Rækkefølgen af handlinger ifølge Krajcik [11]Ved hjælp af Krajczyk-Farm-metoden dekomponerer vi tallet Tallet er det første, hvis kvadrat er større end tallet :
Beregn værdien af funktionen for alle Vi får
Ifølge Fermats metode ville det være nødvendigt at fortsætte beregningerne, indtil kvadratet af et hvilket som helst tal blev fundet. Ifølge Krajczyk-Fermat-metoden, så er det nødvendigt successivt at søge efter dem , som derefter
Det følger af Krajczyk-Fermat-algoritmen, at alle de resulterende tal let kan faktoriseres.
Virkelig:
Det er klart, at produktet af de opnåede fire tal vil være et kvadrat: Så kan vi nu regne
Dernæst finder vi ved hjælp af Euclid-algoritmen .
På denne måde
I 1981 udgav matematikeren John Dixon fra Carleton University sin egen faktoriseringsmetode baseret på Krajczyks ideer [13] [14] [15] [16] .
Dixons algoritme er baseret på begrebet faktorbaser og er en generalisering af Fermats faktoriseringsalgoritme. I algoritmen søges der i stedet for talpar, der opfylder ligningen, efter talpar , der opfylder en mere generel ligning , for hvilken løsning Krajczyk bemærkede flere nyttige fakta. Beregningsmæssig kompleksitet af algoritmen [17]
hvor
Ideen med Fermats faktoriseringsmetode ligger til grund for nogle af de hurtigste algoritmer til faktorisering af store semiprimtal - den kvadratiske sigtemetode og den generelle talfeltsigtemetode . Den væsentligste forskel mellem den kvadratiske sigtemetode og Fermats metode er, at i stedet for at søge efter et kvadrat, indeholder sekvensen par af sådanne tal, hvis kvadrater er lige store i absolut værdi (hvert af disse par kan være en dekomponering af et tal ). Derefter søges der blandt de fundne talpar efter parret, hvilket er udvidelsen af tallet . [atten]
En udvikling af Fermats faktoriseringsmetode er Shanks' metode til kvadratiske former (også kendt som SQUFOF), baseret på anvendelsen af kvadratiske former . Interessant nok er algoritmer baseret på denne metode de ubestridte førende blandt faktoriseringsalgoritmer for tal fra til [19] for 32-bit computere .
Fermats faktoriseringsalgoritme kan anvendes til RSA-kryptanalyse . Hvis tilfældige tal, hvis produkt er lig med, er tæt på hinanden, så kan de findes ved Fermats faktoriseringsmetode. Så kan du finde den hemmelige eksponent , og dermed knække RSA [20] [21] . På tidspunktet for offentliggørelsen af RSA-algoritmen var der kun kendt et lille antal faktoriseringsalgoritmer, hvoraf den mest berømte var Fermats metode.
Den kendte engelske økonom og logistiker W. S. Jevons gjorde følgende antagelse i sin bog The Principles of Science ( 1874 ) [22] :
Givet to tal, kan du finde deres produkt på en enkel og pålidelig måde, men det er en helt anden sag, når du skal finde dets faktorer for et stort antal. Kan du se, hvilke to tal der ganges til 8616460799 ? Jeg tror ikke, at andre end mig ved det.
Interessant nok kan det tal, der er angivet af Jevons, dekomponeres manuelt ved Fermats metode ved hjælp af sigtemetoden på cirka 10 minutter. Faktisk ,. Ved hjælp af sigtemetoden kan man hurtigt komme frem til forholdet
Således har nedbrydningen til prime faktorer formen .
Jevons hovedidé om kompleksiteten i at nedbryde tal i primfaktorer i sammenligning med deres multiplikation er gyldig, men kun når det kommer til produktet af tal, der ikke er så tæt på hinanden [23] .
Talteoretiske algoritmer | |
---|---|
Enkelthedstest | |
At finde primtal | |
Faktorisering |
|
Diskret logaritme | |
Finder GCD | |
Modulo aritmetik | |
Multiplikation og division af tal | |
Beregning af kvadratroden |