KOMPUTERALGEBRA RENDSZEREK BEADANDÓK 2010-2011.I Czirbusz Sándor 2010. november 6. I. rész Feltételek Kétfajta feladat van, mindenkinek mindkét típusból legalább egy-egy feladatot kell megoldani. Vagy matematikai modellt kell készíteni, vagy programot a kitűzött feladatra. A matematikai modelleket vagy Maple- vagy Sage-munkalapban kell megoldani, nem kötelező programot írni, ahol lehet készítsünk grafikát illetve animációt. Itt a választott komputeralgebra rendszer minden tudása alkalmazható. A programírásnál a választott rendszer,,magas szintű tudása nem használható, azaz ha megoldható egy utasítással (például LinSolve), azt tilos alkalmazni. A feladatok mellett található betű utalás a modell vagy program szóra, de nem kötelező ragszkodni hozzá. A szám a feladat pontértéké jelöli. II. rész Feladatok 1. Kriptográfia 1.1.,,Papíros ceruzás kriptográfia Az itten eljárásokat akár munkalaposan lehet szemléltetni, akár programot lehet rá írni. Célszerű többet is feldolgozni,,egy füst alatt. 1.1.1. Transzpozíciók Rácsos kerítés : (20P) A szöveget több sorba cikk-cakkban írjuk le, majd a sorokból össze állítjuk az üzenetet. Például az,,informatikus vagyok 1
szövegre i o a k g k n r t u v y f m i s a o A,,kódolt szöveg :,,ioak gnrtuvykfmisao (A célszerű karakterkészletet korlátozni) Forgó rács : Adott egy négyzetrács, a rácsok negyede lyukas. A rácsot ráteszik egy papírra, majd a lyukaba írják az üzenet első részét. Ezután a rácsot 90 fokkal elforgatják a négyzet középpontja kerül, a szöveg második része az így keletkezett lyukakba kerül. Ugyanezen irányba újra elforgatják, újra beírják a szöveget a lyukakba, majd mégegyszer. Egyszerű oszlopcsere : Kitalálunk egy olyan kulcszót, ami csupa különböző betűből áll. Felírjuk egy táblázat tetejére, a szöveget sorokra tördelve betűről betűre írjuk a táblázatban kulcs betűi alá. Ezután a kulcs betűit rendezzük, a rendezéssel mozgatjuk a szöveg oszlopait is. (Kulcscsere ) Luigi Sacco oszlopcseréje : Ugyanúgy, mint az egyszerű oszlocserénél, felírunk egy kulcszót, majd a kulcszó betűi alá odaírjuk, a rendezésebn hanyadikok. A szöveget sorfolytonosan írjuk, az első sorban az 1-et tartalmazó oszlopig, a második sorban a 2-t tartalmzó oszlopig, sít. A,,tiktos szöveg az oszlopokban van. Nihilista transzpozíció : Most a kulcszót nemcsak az oszlopfejlécekbe, hanaem a sork elejére is beírjuk. Az sozloponkénti rendezés után rendezzük a sorokat is, a titkosított szöveg a sorokban van. Cadenus : Most is egy kulcs alá írjuk a szöveget, de a szövegtől balra egy oszlopba felírjuk a használt áécé betűinek egy permutációját. Rendezzük a kulcs szerint az oszlopokat, majd minden oszlopot felfelé rotálunk a következőképp : megnézzük, a kód betűje hol van a permutált ábécében, megfelelő oszlopot adig toljuk felfelé, amig a sor sozlop metszéspontban lévő betű az leső pozícióra kerül. 1.1.2. Egyábécés helyettesítés KamaSutra kódolás : Az ábécé betűit táblázat alapján párosítjuk, a megfeleltetést véletlengenerálással végezzük. Caesar kódolás : A kódolást úgy végezzük, hogy az számmal körbe shifteljük. ÁBC betűit adott 2
Affin cipher : KamaSutra utána Caesar Nihilista helyettesítés(angol ábécével) : A,,j t azonosnak vesszük az,,i vel. Az ábécét véletlesnzerúen beírjuk egy 5 5-ös táblázatba, a sor- és oszlopsorszámokból kapunk egy kétejgyú kódot a betűkhöz. Elrendezzük a kulcszó alá megint a szöveget. A szöveget úgy kódoljuk, hogy a betű kódjához hozzáadjuk a felette lévő kulcsbetű kódját. Ha az eredmény nagyobb 100 nál, levonunk belőle 100 at. Átlépős tábla Készítünk egy 3 10 es táblázatot, indexeljük a sorokat oszlopokat 0 val kezdve. A kódjaink 1 és kétjegyű számok lesznek. Az ábécét beírjuk a táblázatba sorfolytonosan úgy, hogy a kulcszóval kezdünk, utána a megmaradt betűk. 0 1 2 3 4 5 6 7 8 9 0 C - - Z I R B U S Z 1 A D E F G H J K L M 2 N O P Q T V W Y. / A két kihúzott hely azért van, mert nem használható az 1 és 2 egyjegyűként. (Ennek variánsát használták az orosz kémek a II. világháborúban) Bacon titkosírása Az ábécé minden betűje kapjon egy 5 jegyű bináris kódot, a speciális karakterek hatjegyűek. Kódoljuk át az üzenetet, majd vegyünk egy ugyanilyen hosszú ártalmataln szöveget(akár halandzsa is lehet). Ahol a kódban 0 van, ott kisbetűre váltunk, ahol 1, ott nagybetűre. 1.1.3. Többábécés helyettesítés Vigènere : Készítünk egy kódoló táblát, sor- és oszlopfejlécei az ábécé betűi, minden sorba az ábécé permutációi kerülnek(különböző). A titkosídandó szöveg alá írjuk a kulcsot, ha rövidebb a kulcs, ismételjük. Majd a k kódolandó betű és kulcsbetű párhoz tartozó betűt keressük ki a kódtáblából. Vigènere variáns: Ha rövid a kulcs nem ismételjük, hanem shiftelve másoljuk le 1.2.,,Modern kriptográfia 1.2.1. AES A Sage mini-aes csomagjáról készítsünk prezentációt. 3
2. Számelmélet 2.1. Módosíott euklideszi algritmus A következő egyszerű számelméleti tényeket kihasználva írjunk módosítsuk úgy az euklideszi algoritmust, hogy az algoritmus,,számolós része már egyszeres pontosságú egészekkel dolgozzon: gcd(a,b) = gcd(b,a mb), minden m Z esetén gcd(a,b) = 2 gcd( a 2, b ), ha a,b párosak 2 gcd(a,b) = gcd(a, b ), ha a páratlan b páros 2 2.2. Kerék faktorizáció A kerékfaktorizáció módszere a következő 1. Valamilyen módszerrel (pl : tudjuk róluk ) határozzuk meg az első n prímszámot, készítsük el a szorzatukat, legyen ez N 2. Egy kör kerületére írjuk körbe az 1,2,...,N számokat 3. EgynagyobbkoncentikuskörkerületéreírjukfelazN+1,N+2,...,2N számokat úgy, hogy a szám helyéhez vezető sugáron (küllő) pont az 1,N +1,2,N +2,... számok legyenek 4. Folytassuk amíg kimerítjük a számtartományt 5. Karikázzuk be a belső körön az első n prímet, majd húzzuk ki a hozzátartozó küllőn az összes számot 6. Minden p j eredeti prímre húzzuk ki a belső körön p 2 j től N ig a p j többszöröseit és a megfelelelő küllőt is. 2.3. Benford szabály : Másképp az első számjegy szabálya, azt mondja ki, hogy a valós forrásból eredő (pl. mérési eredmények) számlisták első számjegyének eloszlása nem egyenletes. Például az 1 első számjegyként majdnem 13 gyakorisággal fordul elő. (Bővebben itt) A prímszámok megsértik ezt a szabályt. Készítsünk modellt, amelyik különböző számrendszerekben teszteli ezt. 2.4. Prímgenerálás Létezik olyan a valós szám, hogy az f : N Z,n a 3n csak prímet generál. Modellezzük ilyen valós szám keresését. 4
2.5. Primitív gyök keresése I Adott egész számra keressük meg az összes primitív gyökét. Ezután 1 és 1000 között minden prímnek keressük meg az összes primitív gyökét 3. Kalkulus 3.1. Riemann-integrálás definíció szerint Néhány elemi függvény példáján modellezzük le a Riemann integrálást a definíció alapján (Animáció szükséges) 3.2. Görbe ívhossza Néhány egyszerű görbepéldáján modellezzük le a görbe ivhossz számítást (Animáció szükséges) 3.3. Az éhes kutya A derékszögű koordinátarendszerben az y = a egyenes mentén a > 0 haladunk, pórázon vezetünk egy kutyát, a póráz hossza 0 < l < a. Az origóban valaki elhelyezte a kutya kedvenc ételét. A kutyus mindig alehető legközelebb igyekszik kerülni a csemegéhez. Modellezzük le a kuyta által,,leírt pályát. 3.4. A házőrző A kutya egy betörőt kerget, mindig úgy, hogy adott pillanatban pont gazfickó pillanatnyi helyzetét veszi célpontnak. Modellezzük a kutya mozgását a betörő mozgásától függően. 3.5. Newton-iteráció Az f(x) = 0 egyenlet gyökeinek megtalálásához írjuk meg az iterációt. Készítsünk grafikont is! 4. Valószínűségszámítás 4.1. Görbe alatti terület számítása Számítsuk ki egy görbe alatti területet a következőképp: ha az y(x) a görbe egyenlete, akkor az (a, 0),(b, 0),(0, y(a)),(0, y(b)) téglalapon (a, b R) véletleszerűen vegyünk fel pontokat, majd adott mintavételezési határ elérése után becsüljük a területet a görbe alatti és görbe feletti pontok számának arányából. 5
5. Kódolás 5.1. Huffmann-kód A bemenő adataink a jelkészlet, a jelek relatív gyakorisága, illetve a kimenő jelkészlet. Készítsük el a kódot, teszteljük is. 5.2. BCH-kód Készítsünk bináris BCD-kódot! Bemenő adat (n, k). 6. Algebra 6.1. Diszkrét Fourier transzformáció Készítsünk programot a gyors Fourier-transzformcáira, invezére, és a gyorsszorzásra. 6.2. Diéder csoport Modellezzük le adott n esetén a D n diédercsoportot! 7. Lineáris algebra 7.1. Gauss-elimináció Írjunk programot lineáris egyenletrendszer megoldására Gauss-eliminációval. 7.2. Háromszög szögöszege Az A(3, 2), B(2, 5), C(7, 9) pontokról állapítsuk meg, hogy lehetnek egy háromszög csúcspontjai. Számítsuk ki a háromszög területét, kerületét, bizonyítsuk be, hogy a szögösszeg 2π. Általánosítsunk 7.3. Forgatás Rajzoljunk egy házikót (mint kisiskolás korunkban), majd animáljuk az egyik tengely körüli forgatását. 8. Egyéb 8.1. Nyolc vezér Helyezzünk el a sakktáblán 8 vezért úgy, hogy ne üssék egymást! Keressük meg az összes lehetséges elhelyezést! Készítsünk animációt! 6
8.2. Fordított lengyel jelölés Írjunk programot, mely a bemenő infix matematikai kifejezést átalakítja postfixszé. Értékeljük ki a kifejezést az utóbbi alakból! 8.3. Teknőc - grafika Írjunkolyaneljárást, melyrészbenszimuláljaateknőc-grafikát! Abemenő paraméter egy karaktersorozat, mely f,+, jelekből áll. Az f egységnyi hosszú vonal húzása a teknőc orra irányába, + elfordulás jobbra 90 0 -al, - ugyanez balra. Módosítsukazelőzőeljárástegyhelyettesítési szabálybevezetésével! A szabály pl. ilyen alakú : f ff+f+f+f+f+f-f, ami azt jelenti, hogy a nyil baloldalán lévő karaktersorozat minden előfordullását helyettesíti a nyíl jobboldalán lévővel. Módosítsukiterációbevezetésével afentieljárást! Harmadikparaméreként egy iteráció-számot adunk meg. A helyettesítés ennyiszer kell végrehajtani (Mindig az eredménysztringen!) 8.4. Római számok Készítsünk olyan programot, amivel római számokat tudunk helyiértékessé konvertálni oda és vissza. 7