zajecia2
This commit is contained in:
parent
1bb7241fd4
commit
679051f3a9
22
README.md
22
README.md
@ -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.
|
@ -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
0
zajecia2/test-fermata.py
Normal file
Loading…
Reference in New Issue
Block a user