Fermatův test prvočíselnosti

Fermatův test prvočíselnosti se používá k určení, zda je dané číslo prvočíslo nebo číslo složené. Patří mezi pravděpodobnostní testy prvočíselnosti a je založený na malé Fermatově větě.

Popis

Fermatův test nepatří mezi typické pravděpodobnostní testy. Jednoznačně nerozliší prvočísla od čísel složených (to jsou tzv. Carmichaelova čísla), proto je často označován jako test složenosti.[1]

Na základě malé Fermatovy věty, je-li n {\displaystyle n} prvočíslo a a {\displaystyle a} není jeho násobek platí a n 1 1 ( mod n ) {\displaystyle a^{n-1}\equiv 1{\pmod {n}}} , nebo lze také říci, že a n 1 1 {\displaystyle a^{n-1}-1} je dělitelné číslem n {\displaystyle n} . Po použití obrácené implikace tohoto tvrzení je zřejmé, že existuje-li a { 1 , 2 , . . . , n 1 } {\displaystyle a\in \{1,2,...,n-1\}} takové, že n {\displaystyle n} nedělí a n 1 1 {\displaystyle a^{n-1}-1} , pak musí být n {\displaystyle n} číslo složené.[2]

Příklad: Při zvolení a = 2 ; n = 9 {\displaystyle a=2;n=9} ; 2 8 1 = 255 {\displaystyle 2^{8}-1=255} , číslo 9 {\displaystyle 9} není dělitelem čísla 255 {\displaystyle 255} nebo

a = 2 ; n = 21 {\displaystyle a=2;n=21} ; 2 20 1 = 1048575 {\displaystyle 2^{20}-1=1048575} , také 21 {\displaystyle 21} nedělí číslo 1048575 {\displaystyle 1048575} . Fermatův test potvrdil složenost čísla pro a = 2 {\displaystyle a=2} .

n je složené číslo

Pro složené číslo n {\displaystyle n} a přirozené číslo a {\displaystyle a} , platí:

  • a n 1 1 ( mod n ) {\displaystyle a^{n-1}\not \equiv 1{\pmod {n}}} – číslo a {\displaystyle a} se nazývá Fermatův svědek složenosti čísla n {\displaystyle n}
  • a n 1 1 ( mod n ) {\displaystyle a^{n-1}\equiv 1{\pmod {n}}} – číslo n {\displaystyle n} se nazývá pseudoprvočíslo vzhledem k bázi a {\displaystyle a} .[2][1]

Zobecnění

Je-li n {\displaystyle n} prvočíslo {\displaystyle \Rightarrow } ( a { 1 , 2 , . . . , n 1 } : a n 1 1 ( mod n ) ) {\displaystyle {\bigl (}\forall a\in \{1,2,...,n-1\}:a^{n-1}\equiv 1{\pmod {n}})} nebo a { 1 , 2 , . . . , n 1 } : a n 1 1 ( mod n ) n {\displaystyle \exists a\in \{1,2,...,n-1\}:a^{n-1}\not \equiv 1{\pmod {n}}\Rightarrow n} není prvočíslo

Příklady

Související informace naleznete také v článku Kongruence.

Zadání1: n = 5 {\displaystyle n=5} a platí pro a = 1 ; 1 5 1 = 1 4 = 1 {\displaystyle a=1;1^{5-1}=1^{4}=1} , a = 2 ; 2 5 1 = 2 4 = 16 {\displaystyle a=2;2^{5-1}=2^{4}=16} atd.

1 4 1 ( mod 5 ) {\displaystyle 1^{4}\equiv 1{\pmod {5}}}

16 = 2 4 1 ( mod 5 ) {\displaystyle 16=2^{4}\equiv 1{\pmod {5}}}

81 = 3 4 1 ( mod 5 ) {\displaystyle 81=3^{4}\equiv 1{\pmod {5}}}

4 4 1 ( mod 5 ) {\displaystyle 4^{4}\equiv 1{\pmod {5}}} {\displaystyle \Rightarrow } n = 5 {\displaystyle n=5} je prvočíslo.

Zadání2: n = 15 {\displaystyle n=15} ; a = 2 ; 1 2 1 = 1 {\displaystyle a=2;1^{2-1}=1}

1 14 1 ( mod 15 ) {\displaystyle 1^{14}\equiv 1{\pmod {15}}}

2 14 4 ( mod 15 ) {\displaystyle 2^{14}\equiv 4{\pmod {15}}} {\displaystyle \Rightarrow } kongruence není rovna 1 {\displaystyle 1} , proto číslo 15 {\displaystyle 15} není prvočíslo a číslo 4 {\displaystyle 4} je svědek složenosti.[3]

Test pro velká čísla

Pro „velká“ čísla je časově náročné používat Fermatův test pro všechna čísla n {\displaystyle n} .

Zadání3: Je číslo n = 21 {\displaystyle n=21} prvočíslo? Lze vybrat náhodná čísla a = { 8 , 13 , 3 } . {\displaystyle a=\{8,13,3\}.}

a = 8 8 20 8 2 10 64 10 1 10 1 ( mod 21 ) {\displaystyle a=8\Rightarrow 8^{20}\equiv 8^{2^{10}}\equiv 64^{10}\equiv 1^{10}\equiv 1{\pmod {21}}} 21 {\displaystyle \Rightarrow 21} může být prvočíslo,

a = 13 13 20 13 2 10 169 10 1 10 1 ( mod 21 ) {\displaystyle a=13\Rightarrow 13^{20}\equiv 13^{2^{10}}\equiv 169^{10}\equiv 1^{10}\equiv 1{\pmod {21}}} 21 {\displaystyle \Rightarrow 21} může být prvočíslo,

a = 3 3 20 9 10 81 5 ( 3 ) 5 ( 3 ) .81 9 ( mod 21 ) {\displaystyle a=3\Rightarrow 3^{20}\equiv 9^{10}\equiv 81^{5}\equiv (-3)^{5}\equiv (-3).81\equiv 9{\pmod {21}}} 21 {\displaystyle \Rightarrow 21} není prvočíslo!

Algoritmus

Fermatův test prvočíselnosti:

Vstup: liché celé číslo n 3 {\displaystyle n\geqq 3} , parametr počet čísel t 1 {\displaystyle t\geqq 1} .

Výstup: odpověď na otázku „je n {\displaystyle n} prvočíslo?“

for (i = 1; i <= t; i++)
{
    vyber náhodné int a;
    r = a*(n-1) \mod n; //RSMA 
    if (r !i = 1 ) then
    return ("složené")
    break;
}
return ("prvočíslo")

Pro testování prvočíselnosti velkého čísla se Fermatův test v praxi běžně nepoužívá. Existuje pravděpodobnost, že místo náhodného lichého celého čísla bude vygenerováno pseudoprvočíslo, tedy složené kladné celé číslo, které je chybně určeno jako prvočíslo.[1]

Reference

  1. a b c OCHODKOVÁ, Eliška. Matematické základy kryptografických algoritmů [online]. Západočeská univerzita v Plzni: Vysoká škola báňská – Technická univerzita Ostrava, 2012 [cit. 2021-10-31]. Dostupné online. 
  2. a b MASÁKOVÁ, Zuzana. Prvočísla v akci. Rozhledy matematicko-fyzikální. 2015, roč. 90, čís. 1, s. 66–77. Dostupné online [cit. 2021-10-31]. ISSN 0035-9343. 
  3. STULÍKOVÁ, Gabriela. TESTOVÁNÍ PRVOČÍSELNOSTI [online]. Plzeň: Západočeská univerzita v Plzni, Fakulta pedagogická, 2017 [cit. 2021-10-31]. Dostupné online. 

Související články

Externí odkazy

  • Slovníkové heslo Fermatův test prvočíselnosti ve Wikislovníku
Pahýl
Pahýl
Tento článek je příliš stručný nebo postrádá důležité informace.
Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty.