This commit is contained in:
Jakub Adamski 2021-10-21 15:03:24 +02:00
parent 1bb7241fd4
commit 679051f3a9
3 changed files with 33 additions and 13 deletions

View File

@ -1,2 +1,24 @@
# Kryptografia
## Zajecia2
### Twierdzenie Fermata
Małe twierdzenie Fermata mówi, że jeśli p jest liczbą pierwszą i a nie dzieli się przez p, to:
```
a ^ (p-1) === 1 (mod p)
```
Przystawanie modulo [link](http://www.ftj.agh.edu.pl/~lenda/number_theory/A31.pdf) Przykład dla p = 13:
```
a^12 - 1 = k * 13
k - całkowite
(3^12 -1 / 13) = k
k = 40880
k jest całkowite więc spełnia twierdzenie Fermata.
```
### Test pierwszości Fermata
[Link](https://pl.wikipedia.org/wiki/Test_pierwszo%C5%9Bci_Fermata), ogólniej [link](https://pl.wikipedia.org/wiki/Test_pierwszo%C5%9Bci)
<br/>
a losujemy z zakresu od 1 do p - jeśli a nie będzie względnie pierwsze z p to znaczy że p nie jest liczbą pierwszą.
### Reszta kwadratowa modulo
[Link](https://pl.wikipedia.org/wiki/Reszta_kwadratowa_modulo), [przykład](https://matematyka.pl/viewtopic.php?t=354543) twierdzenie jest w materiałach na Teams.

View File

@ -2,29 +2,27 @@
def potegowanie(x, k):
y = 1
i = k.bit_length()
while i >= 0:
y = y**2
if (k & 1) == 1:
while k > 0:
if k & 1:
y = y*x
x = x**2
k = k >> 1
i = i - 1
return y
def potegowanieimod(x, k, n):
y = 1
i = k.bit_length()
while i >= 0:
y = y**2 % n
if (k & 1) == 1:
while k > 0:
if k & 1:
y = y*x % n
x = x**2 % n
k = k >> 1
i = i - 1
return y
print(potegowanie(2, 6))
print(potegowanieimod(5, 2, 10))
wynik = potegowanieimod(557447646341221346636192772896901610558710893835414944403480118710131817164269282839046936145176310843035027195369552947724772574976124889744487830405662539681582010111238770266408227840530530562128937575104894419356210796751265695974980542800695284666417470596597594320307059087588663353662759831096,
6262263371377541559141206895621884814807915303145516042650825916222136098970293814810224532254572606923485012865464653542596037422501455912488470111758490086095137370045391054577237580171284636282615725496568360590261691887179088064684821943355507214597667739684622993519703639685862165456606534344947,
12603105321135622767305477321226264526101452611580750172942995573642583834115518597214611628755756515637031503762433821635382941259415596191772792339558820602095032907912585193142776570851767147616224169462438014704841831725007609378775100884540643665648152752437883986935155645486418494891325614905908)
if wynik == 5999094661563003763568151773868137137878551943868313644708609682354664804445417731065849088949097475986000148641869282547289131404075798592274418987346555863193991175013972255255302184349784703771765294091989135154969897917024913262973652830513067145466227133548941154196707964903756614122209256595084:
print("ok")

0
zajecia2/test-fermata.py Normal file
View File