Test prvočíselnosti

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Test prvočíselnosti je v matematice postup pro ověření, zda je dané číslo prvočíslo, tedy zda je dělitelné pouze jedničkou a samo sebou. Existuje několik různých metod testování prvočíselnosti, které se liší přesností a časovou náročností. Mezi nejznámější metody patří například Eratosthenovo síto, které je založeno na principu vyškrtnutí všech násobků čísla, a test Fermatova malého věty, který využívá známého matematického tvrzení. Test prvočíselnosti je důležitý v různých oblastech matematiky a informatiky, například při generování bezpečných klíčů pro šifrování.

Mersennova prvočísla Test prvočíselnosti je algoritmus z oboru teorie čísel, kterým lze určit, zda je zadané přirozené číslo prvočíslem. Obvykle přitom tuto otázku zodpoví, aniž by přímo našel prvočíselný rozklad (to je považováno za podstatně náročnější úlohu), a často se jedná o pravděpodobnostní algoritmy či algoritmy použitelné jen na určitý druh čísel.

Kromě algoritmů, které v případě úspěchu prokáží, že je číslo prvočíslem, jsou také algoritmy, které v případě úspěchu prokáží, že se jedná o složené číslo - takové se někdy označují testy složenosti a jejich zřejmě nejznámějším příkladem je oblíbený Millerův-Rabinův test prvočíselnosti.

Testování prvočíselnosti je obecně možné v polynomiálním čase, což bylo prokázáno objevením algoritmu AKS v roce 2002. Jedná se ovšem o asymptotickou složitost, při praktickém použití svou rychlostí silně zaostává a jsou často upřednostňovány jiné algoritmy, byť třeba pravděpodobnostní.

...

Jednoduché algoritmy

Zkusmé dělení

Koncepčně nejjednodušším algoritmem testujícím prvočíselnost je zkusmé dělení, které postupně zkouší dělit testované číslo možnými děliteli. V závislosti na propracovanosti implementace se může jednat o zkusmé dělení všemi přirozenými čísly menšími než číslo samo, nebo o optimalizované varianty, kdy se zkouší dělit například pouze dvojkou a pak lichými čísly, nebo pouze prvočísly menšími než odmocnina testovaného čísla.

Tento algoritmus má v každém případě asymptoticky exponenciální složitost (je klasickým příkladem algoritmu s pseudopolynomickou časovou složitostí).

Pro otestování prvočíselnosti malého čísla řádově do milionu ale může být jeho optimalizovaná varianta řešením nejrychlejším.

Algoritmy hledání prvočísel

Jako test prvočíselnosti je možné použít i algoritmy, jejichž úkolem je najít všechna prvočísla od 2 do zadaného čísla. Klasickým příkladem je Eratosthenovo síto. +more Asymptoticky ale má exponenciální časovou složitost a navíc má i vyšší paměťovou náročnost a je celkově poměrně pomalé, neboť řeší daleko obsáhlejší úlohu a pro cílené testování prvočíselnosti náhodných velkých čísel se tedy nehodí.

To platí i pro jeho moderní optimalizované varianty a odnože, například Atkinovo síto.

Obecné pravděpodobnostní algoritmy

Fermatův test

Fermatův test je založen na Malé Fermatově větě, tedy na pravidle, že pro prvočíselné p platí :a^{p-1}\equiv 1 \mod p pro všechna 0. Pokud se podaří nalézt a, pro které rovnost neplatí, pak p nemůže být prvočíslo. +more I v případě složeného čísla ale rovnost může platit pro některá a (složené číslo se pak vzhledem k a označuje za Fermatovo pseudoprvočíslo), dokonce existuje nekonečně mnoho takzvaných Carmichaelových čísel, která se pro všechna a chovají vzhledem tomuto testu jako prvočíslo a rovnici splňují. Fermatův test je tedy pravděpodobnostním testem složenosti.

Solovayův-Strassenův test

Solovayův-Strassenův test využívá Eulerovu větu a Jacobiho symbol a to tak, že ověřuje platnost rovnice :a^{(p-1)/2} \equiv \left(\frac{a}{p}\right) \pmod p, kterou všechna prvočísla p splňují pro všechna 0. Pokud test najde a, které rovnici nesplňuje, našel důkaz, že p je složené číslo. +more Ovšem i pro složené číslo může být rovnost splněna - říká se mu pak Eulerovo pseudoprvočíslo. Jedná se tedy o pravděpodobnostní test složenosti.

Millerův-Rabinův test

Millerův-Rabinův test podobně jako Fermatův a Solovayův-Strassenův test hledá svědka složenosti, tedy nějaké a, které nesplní rovnice, které by pro prvočíslo platily. V případě Millerova-Rabinova testu je potřeba najít a, že : a^{d} \not\equiv 1\pmod{n}

a : a^{2^rd} \not\equiv -1\pmod{n} pro všechna 0 \le r \le s-1

kde 2^sd=n-1 a d je liché. I Millerův-Rabinův test je pravděpodobnostním testem složenosti.

Specializované algoritmy

Některé algoritmy jsou určeny jen pro čísla určitého tvaru.

Pépinův test

Pépinův test je určen k testování Fermatových čísel. Jedná se o deterministický test, který běží v polynomiálním čase a je jím možno prokázat, že dané číslo je prvočíslem.

Lucasův-Lehmerův test

Lucasův-Lehmerův test je určen k testování Mersennových čísel.

Kategorie:Prvočísla

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top