Subtrees hinzugefügt

This commit is contained in:
Dirk Zechnall 2025-01-05 09:35:18 +01:00
parent bf2cd02475
commit cfa0ec9c0d
27 changed files with 965 additions and 0 deletions

View file

@ -0,0 +1,6 @@
*.sh
*.class
*.ctxt
repo.adoc
repo_subtree.adoc
/alt

View file

@ -0,0 +1,29 @@
// Filtered on Sonntag 2022-März-13 at 23:15:22 by Tippfilter 0.4-4-g83a7d89 (development build)
/** Diese Klasse enthält eine Methode zur schnellen modularen Potenzierung,
* die bei RSA und anderen modernen Kryptoverfahren zum Einsatz kommt.
*
* Sie ist als Programmierübung für Oberstufenschüler gedacht. Dabei stehen
* die rekursive Implementierung und die modulo-Operation im Vordergrund.
*
* @author Urs Lautebach
* @author Tobias Nopper
* @version 2021-03-24
* Dieses Projekt steht unter der Lizenz CC BY-NC-SA 4.0
* This project is licensed under CC BY-NC-SA 4.0
* (https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) */
public class SchnellePotenzierung {
/** Berechnet die modulare Potenz a^b mod m.
* Der Modulo der Rest bei der Division; 16:6 = 2 Rest 4, also ist
* 16 mod 6 = 4.
* Java hat dafür den Operator "%"; "16%6" liefert also 4.
* @param a Basis der Potenzierung
* @param b Exponent der Potenzierung
* @param m Modul der Restklasse, in der gerechnet wird
* @return Das Ergebnis der Rechnung a^b mod m. */
public static int modPotenz(int a, int b, int m) {
return -12345; // TODO
}
}

View file

@ -0,0 +1,60 @@
// Filtered on Sonntag 2022-März-13 at 23:15:22 by Tippfilter 0.4-4-g83a7d89 (development build)
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/** Die Test-Klasse SchnellePotenzierungTest enthält Tests für die gleichnamige
* Klasse mit Programmierübungen.
*
* @author Urs Lautebach
* @version 2021-04 */
public class SchnellePotenzierungTest {
/** Konstruktor fuer die Test-Klasse SchnellePotenzierungTest */
public SchnellePotenzierungTest() { }
/** Wird vor jeder Testfall-Methode aufgerufen. */
@Before
public void setUp() { }
/** Wird nach jeder Testfall-Methode aufgerufen. */
@After
public void tearDown() { }
@Test
public void testEinfacheFaelle() {
assertEquals(1, SchnellePotenzierung.modPotenz(1, 0, 5));
assertEquals(1, SchnellePotenzierung.modPotenz(2, 0, 5));
assertEquals(1, SchnellePotenzierung.modPotenz(3, 0, 5));
assertEquals(1, SchnellePotenzierung.modPotenz(2, 0, 5));
assertEquals(1, SchnellePotenzierung.modPotenz(88, 0, 15));
assertEquals(1, SchnellePotenzierung.modPotenz(75345, 0, 15));
assertEquals(1, SchnellePotenzierung.modPotenz(1, 1, 5));
assertEquals(2, SchnellePotenzierung.modPotenz(2, 1, 5));
assertEquals(3, SchnellePotenzierung.modPotenz(3, 1, 5));
assertEquals(17, SchnellePotenzierung.modPotenz(17, 1, 44));
assertEquals(17, SchnellePotenzierung.modPotenz(17, 1, 45));
assertEquals(7, SchnellePotenzierung.modPotenz(7, 1, 44));
assertEquals(7, SchnellePotenzierung.modPotenz(7, 1, 45));
}
@Test
public void testSoMittel() {
assertEquals(49, SchnellePotenzierung.modPotenz(7, 2, 100));
assertEquals(69, SchnellePotenzierung.modPotenz(13, 2, 100));
assertEquals(81, SchnellePotenzierung.modPotenz(9, 2, 152));
assertEquals(81, SchnellePotenzierung.modPotenz(3, 4, 1000));
assertEquals(24, SchnellePotenzierung.modPotenz(2, 10, 1000));
}
@Test
public void testGrosseZahlen() {
assertEquals(80, SchnellePotenzierung.modPotenz(37, 513, 101));
assertEquals(129, SchnellePotenzierung.modPotenz(376, 53, 1001));
assertEquals(5192, SchnellePotenzierung.modPotenz(376, 5173, 12344));
}
}

View file

@ -0,0 +1,42 @@
#BlueJ package file
dependency1.from=SchnellePotenzierungTest
dependency1.to=SchnellePotenzierung
dependency1.type=UsesDependency
editor.fx.0.height=1013
editor.fx.0.width=1034
editor.fx.0.x=2009
editor.fx.0.y=31
objectbench.height=95
objectbench.width=770
package.divider.horizontal=0.6
package.divider.vertical=0.7992125984251969
package.editor.height=399
package.editor.width=643
package.editor.x=1735
package.editor.y=68
package.frame.height=600
package.frame.width=800
package.numDependencies=1
package.numTargets=2
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=60
readme.name=@README
readme.width=49
readme.x=10
readme.y=10
target1.height=70
target1.name=SchnellePotenzierungTest
target1.showInterface=false
target1.type=UnitTestTargetJunit4
target1.width=220
target1.x=120
target1.y=70
target2.height=70
target2.name=SchnellePotenzierung
target2.showInterface=false
target2.type=ClassTarget
target2.width=190
target2.x=10
target2.y=160

View file

@ -0,0 +1,24 @@
This folder was generated on 2022-03-13 23:15:22
by Tippfilter version: 0.4-4-g83a7d89 (development build), built Donnerstag 2022-02-24 at 15:07:14)
using the following configuration:
original folder: /home/urs/Schreibtisch/kr-skript/schnelle-potenzierung
destination folder: /home/urs/Schreibtisch/kr-skript/sschnelle-postenzierung-ROHVERSION
overwrite destination folder: true
config files (order parsed): /home/urs/Schreibtisch/kr-skript/schnelle-potenzierung/bluej.tippfilter
filtered patterns: [file://*.java]
ignored patterns: [dir://.git, file://.gitignore, file://*.tippfilter, dir://doc, file://*.ctxt, dir://bin, file://*.class]
requested sections: {file://package.bluej=UNKNOWN}
global default audience: RAW
all sections requested: true
audience for ALL sections: RAW
write log file: true
write filter date: true
and the sections: written for audience:
1 dir:/ | RAW |
2 file:/SchnellePotenzierung.java | RAW |
3 file:/package.bluej | RAW |
4 file:/SchnellePotenzierungTest.java | RAW |