Enkelthedstest

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 21. maj 2020; verifikation kræver 1 redigering .

Spørgsmålet om at bestemme, om et naturligt tal er primtal , er kendt som primaalitetsproblemet.

En primalitetstest (eller primalitetstest) er en algoritme , der, efter at have taget et tal som input , tillader enten ikke at bekræfte antagelsen om tallets sammensætning eller præcist at hævde dets enkelhed. I det andet tilfælde kaldes det den sande primalitetstest. Primalitetstesten er således kun en hypotese om, at hvis algoritmen ikke bekræfter antagelsen om, at tallet er sammensat , så kan dette tal være primtal med en vis sandsynlighed . Denne definition indebærer mindre tillid til testresultatets overensstemmelse med den sande tilstand end en ægte primalitetstest, som giver et matematisk verificeret resultat.

Introduktion

Problemer i diskret matematik er blandt de mest matematisk komplekse . En af dem er faktoriseringsproblemet , som består i at finde en faktorisering af et tal til primfaktorer. For at løse det skal du finde primtal, hvilket fører til problemet med enkelhed. Primalitetstestproblemet tilhører kompleksitetsklassen P , det vil sige, at køretiden for algoritmerne til at løse det afhænger polynomielt af størrelsen af ​​inputdataene, hvilket blev bevist i 2002 . Der er en lignende, men ubevist, erklæring om faktoriseringsproblemet .

Nogle anvendelser af matematik ved hjælp af faktorisering kræver en række meget store primtal valgt tilfældigt. Algoritmen til at opnå dem, baseret på Bertrands postulat :

Algoritme:

  1. Input : naturligt tal
  2. Løsning (søg efter et tilfældigt primtal P)
    1. Funktionen til at generere et vilkårligt naturligt tal på et segment
    2. Hvis sammensat, så
      1. Hvis da
    3. Returner "  - tilfældig primtal"

Tidspunktet for at løse problemet med denne algoritme er ikke defineret, men der er stor sandsynlighed for, at det altid er polynomium, så længe der er nok primtal, og de er mere eller mindre jævnt fordelt . For simple tilfældige tal er disse betingelser opfyldt.

Det er kendt ( Euklids sætning ), at sættet af primtal er uendeligt. Dirichlets sætning ( 1837 ) siger, at hvis gcd , så er der uendeligt mange primtal kongruente med modulo . Med andre ord er primtal fordelt ensartet i restklasser i henhold til Euler- funktionen [1] for enhver værdi af . Men hvis primtallene er jævnt fordelt, men der er meget få af dem, er søgningen muligvis ikke mulig i praksis. For at løse dette andet problem bruger vi primtalssætningen ( 1896 ), ifølge hvilken antallet af primtal i et interval stiger med . Dette tal har en tendens til uendelig ret hurtigt, hvorfra vi kan konkludere, at selv for store værdier er der en ret stor sandsynlighed ( ) for at finde et primtal tilfældigt. Ud fra dette kan vi konkludere, at den ovenfor beskrevne algoritme kan give svaret i polynomiel tid, hvis der er en polynomiel algoritme, der giver os mulighed for at verificere enkelheden af ​​et vilkårligt stort tal , hvilket fører til problemet med primalitet.

Historisk information

Den allerførste omtale af primtal kendes fra Euklid ( 3. århundrede f.Kr. ). Samtidig blev den første algoritme til at finde primtal opfundet af Eratosthenes ( II århundrede f.Kr. ) og er nu kendt som Eratosthenes si . Dens essens ligger i den sekventielle udelukkelse fra listen over heltal fra til multipla af andre primtal allerede fundet af "sigten" [2] . Langt senere foreslog den arabiske matematiker Ibn al-Banna at opregne heltal ikke op til , men op til , hvilket gjorde det muligt at reducere antallet af operationer. Ulempen ved denne metode er, at i stedet for at kontrollere et givet tal for enkelhed, tilbyder den en sekventiel opregning [3] af alle heltal op til , og er derfor ineffektiv og kræver betydelig computerkraft .

I begyndelsen af ​​det 13. århundrede foreslog Leonardo af Pisa , kendt som Fibonacci, en talfølge (opkaldt efter ham), hvor en af ​​egenskaberne er, at det -. Fibonacci - tal kun kan være primtal for primtal , bortset fra . Denne egenskab kan bruges, når man tester Fibonacci-tal for primalitet. Han foreslog også, uafhængigt af ibn al-Banna, en metode til at kontrollere tal for enkelhed ved opregning. Denne algoritme er sand (eller usandsynlig), fordi svaret altid opnås, men ekstremt ineffektivt.

Den første til at bruge relationer mellem tal til at definere primalitet var Pietro Antonio Cataldi i sit arbejde med perfekte tal. Perfekte tal er dem, der er lig med summen af ​​deres egne divisorer. De første syv perfekte tal er 6, 28, 496, 8128, 33550336, 8589869056 og 137438691328. Cataldi fastslog, at hvis et tal  er primtal, og tallet  også er primtal, så er tallet  perfekt.

I det 17. århundrede var den franske matematiker Marin Mersenne engageret i undersøgelsen af ​​tal af formen [4] , senere navngivet Mersenne-tal til hans ære . Mersenne opdagede, at af de første 257 Mersenne-tal er kun 11 primtal (for n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127 og 257). Ved at gøre det lavede han flere fejl ( er ikke primtal ved p = 67 eller 257, og er ved p = 61, 89 og 107). Søgningen efter primtal blandt Mersenne-tal er ret enkel takket være Luc-Lehmer-testen , som giver dig mulighed for at finde en løsning relativt hurtigt. Derfor er Mersenne-tallene de største blandt de i øjeblikket kendte primtal. I korrespondancen mellem Mersenne og Fermat blev flere flere ideer vedrørende primtal udtrykt [4] .

Så Fermat opdagede, at hvis et heltal ikke er deleligt med et primtal , så er tallet altid deleligt med ( Fermats lille sætning ). Sætningen blev senere generaliseret af Euler . Adskillige primalitetstest er baseret på Fermats lille sætning. Fermat foreslog også, at tallene i formen for alle naturlige tal er primtal . Dette er faktisk tilfældet for . Et modeksempel på denne påstand fandt Euler- . For at teste Fermat-tal for primalitet er der en effektiv Pepin-test . Til dato er der ikke fundet nye Fermat-primtal.

Blandt andre videnskabsmænd, Euler, Legendre , Gauss beskæftiget sig med enkelheden af ​​tal . Betydelige resultater med at løse problemet med primalitet blev opnået af den franske matematiker Édouard Lucas i hans arbejde med Fermat- og Mersenne-tallene. Det er kriteriet for enkelheden af ​​Mersenne-tallene givet af ham, der nu er kendt som Lucas-Lehmer-testen.

I 2002 blev en deterministisk polynomiel primalitetstest, Agrawal-Kayal-Saxena-testen , udviklet . Dets fremkomst blev forudsagt af eksistensen af ​​polynomielle primalitetscertifikater og som en konsekvens af det faktum, at problemet med at kontrollere et tal for primalitet tilhørte NP- og co-NP- klasserne på samme tid.

Ægte primalitetstests

Eksisterende algoritmer til at teste et tal for primalitet kan opdeles i to kategorier: ægte primalitetstest og sandsynlighedsprimalitetstest. Sande tests som et resultat af beregninger giver altid kendsgerningen til enkelthed eller sammensætning af et tal, en probabilistisk test giver et svar om sammensætningen af ​​et tal eller dets ikke-sammensætning med en vis sandsynlighed [2] [4] . For at sige det enkelt siger den probabilistiske algoritme, at tallet højst sandsynligt ikke er sammensat, men i sidste ende kan det vise sig at være enten primtal eller sammensat. Tal, der opfylder den probabilistiske primalitetstest, men er sammensatte, kaldes pseudoprimer [1] . Et eksempel på sådanne tal er Carmichael-tallene [3] . Du kan også navngive Euler-Jacobi-numrene for Solovay-Strassen-testen og Lucas pseudoprimer.

Et eksempel på ægte primalitetstest er Luc-Lehmer-testen for Mersenne-tal . Den åbenlyse ulempe ved denne test er, at den kun gælder for en række bestemte slags tal. Andre eksempler inkluderer dem, der er baseret på Fermats lille sætning :

Såvel som:

Probabilistiske primalitetstests

Denne kategori omfatter:

Enkelthedstest i kryptografi

I øjeblikket er primtal meget brugt inden for informationssikkerhed. Først og fremmest skyldes dette opfindelsen af ​​den offentlige nøglekrypteringsmetode, som bruges i informationskryptering og i elektroniske digitale signaturalgoritmer . I øjeblikket er størrelsen af ​​primtal, der bruges til dannelsen af ​​en digital signatur ved hjælp af elliptiske kurver, i henhold til standarderne, i overensstemmelse med GOST R 34.10-2012 mindst 254 bit. For så store tal er spørgsmålet om at bestemme et tals primehed ekstremt vanskeligt. Simple metoder, såsom opregningsmetoden, er uegnede til brug på grund af, at de kræver en ekstremt stor mængde beregningsressourcer og meget tid [6] .

Bestemmelsen af ​​et tals primeness er også nødvendig, når man krakker information krypteret eller signeret ved hjælp af RSA-algoritmen . For at åbne sådan en besked er det nødvendigt at kunne opdele et tal i to primfaktorer, hvilket er en ikke-triviel opgave for store tal.

På den anden side, når der genereres nøgler til offentlige nøglekryptosystemer , elektroniske signatursystemer osv., bruges store pseudo-tilfældige primtal. For eksempel, når du bruger Diffie-Hellman-protokollen, er det nødvendigt at have et primtal, der angiver det endelige felt . Derfor gør brugen af ​​en effektiv primatitetstest det muligt at øge pålideligheden af ​​algoritmer til generering af sådanne nøgler.

Se også

Noter

  1. 1 2 Kormen T., Leiser Ch . Algoritmer. Konstruktion og analyse. - M. : MTSNMO, 2002. - S. 765-772.
  2. 1 2 Vasilenko O. N. Talteoretiske algoritmer i kryptografi. - M. : MTSNMO, 2003. - 328 s.
  3. 1 2 Crandall R., Pomerance C. Prime Numbers: A Computational Perspective. - Springer, 2005.
  4. 1 2 3 Donald Knuth . Kunsten at programmere, bind 2. Afledte algoritmer. - M . : "Williams" , 2007.
  5. Nesterenko Yu. V. Introduktion til kryptografi. - Peter, 2001. - 288 s.
  6. B. Schneier. Anvendt kryptografi. - S. 296-300.

Litteratur