matematykaszkolna.pl
programowanie student: Witam jak w systemie Sage zrealizowac potęgowanie modularne
22 lip 11:59
Mateusz: Mozna tradycyjnie metodą podnoszenia do kwadratu i mnożenia wyglądałoby to tak: def ModExp(x,e,N): r""" Wejście: x−x∊C e−nieujemna liczba całkowita N−dodatnia liczba całkowita Wynik: xe mod N """ ebits=e.bits() ebitlen= len(ebits) y=1 for j in xrange(ebitlen): y=y2%N if(ebits[ebitlen−1−j]==1): y=x*y%N return y Sage oferuje tez do potęgowania modularnego specjalne obiekty ktore dziłają znaczni szybciej niz sposobem tradycyjnym takim obiektem jest np IntegerModRing mozna go np tak wykorzystac: pzykładowo chce policzyc 111345mod 1024 sage: R=IntegerModRing(1024) sage: x=R(111) sage: x 345 itd. zapis troche nieczytelny bo znaczenie symboli w edytorze jest jakie jest ale mysle ze miałes choc troche z tym do czynienia i połapiesz sie co jest czym tutaj ze trzeba np zastosowac "daszek" itd
22 lip 12:40
student: Ok dzieki a jak rozwiązac to zadanie: Ile istnieje afinicznych szyfrów Cezara spełniających warunek różnowartościowości?
24 lip 18:57
Mateusz: afiniczny szyfr Cezara mozna uogolnic taką funkcją: C=E([a,b],p)=(ap+b) mod 26 ponadto musi byc spełniony warunek różnowartościowosci if p≠q to E(k,p)≠E(k,q) i wracając do zadania mamy 12 mozliwosci dla a bo a=(1, 3, 5 ,7, 9, 11.....25) i 26 mozliwych dozwolonych wartosci b bo b∊<0, 25> co daje nam w sumie 12*26 mozliwych kombinacji
24 lip 19:08