diff --git a/README.md b/README.md index a678cc6..846442c 100644 --- a/README.md +++ b/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) +
+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. \ No newline at end of file diff --git a/zajecia1/potegowanie.py b/zajecia1/potegowanie.py index 6d795e3..b9396e7 100644 --- a/zajecia1/potegowanie.py +++ b/zajecia1/potegowanie.py @@ -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") \ No newline at end of file diff --git a/zajecia2/test-fermata.py b/zajecia2/test-fermata.py new file mode 100644 index 0000000..e69de29