--- /dev/null
+function isPrime = rabinMillerTest(n, a)
+ %
+ % Rabin-Miller Primzahltest
+ % Prüft, ob n Primzahl ist.
+ % Führt den Test mit Basis a durch (1 <= a <= n-1).
+ %
+ % Fehlerwahrscheinlichkeit unter 25 Prozent.
+ %
+
+ if (n == 2)
+ isPrime = 1;
+
+ elseif mod(n, 2) == 0
+ isPrime = 0;
+
+ elseif gcd(n, a) ~= 1
+ isPrime = 0;
+
+ else
+
+ % Größte Zweierpotenz aus n-1 herausholen
+
+ s = 1;
+ p = 2;
+
+ while mod(n-1, 2*p) == 0
+ s = s + 1;
+ p = p * 2;
+ end
+
+ % Größte Zweierpotenz in n-1 ist also p=2^s
+ d = (n-1)/p;
+
+ b = sqmult(a, d, n, '*', 1);
+
+ if mod(b, n) == 1
+ isPrime = 1;
+
+ else
+ isPrime = 0;
+
+ for i = 1:s
+ if mod(b, n) == mod(-1, n)
+ isPrime = 1;
+ break;
+ end
+
+ b = mod(b*b, n);
+ end
+
+ end
+
+ end
+
+end
\ No newline at end of file
--- /dev/null
+function isPrime = solovayStrassenTest(n, a)
+ %
+ % Solovay-Strassen Primzahltest
+ % Prüft, ob n Primzahl ist.
+ % Führt den Test mit Basis a durch (1 <= a <= n-1).
+ %
+ % Ergebnis 0 (keine Primzahl) ist immer korrekt.
+ % Ergebnis 1 (Primzahl) ist in mindestens 50 Prozent der Fälle korrekt.
+ %
+
+
+ % Falls n bzw. a integer sind, macht das komischerweise Probleme mit
+ % sqmult...
+
+ %if (~isinteger(n))
+ % n = int32(n);
+ %end
+
+ %if (~isinteger(a))
+ % a = int32(a);
+ %end
+
+
+ if (n == 2)
+ isPrime = 1;
+
+ elseif mod(n, 2) == 0
+ isPrime = 0;
+
+ else
+ j = jacobiSymbol(a, n);
+
+ if j == 0
+ isPrime = 0;
+
+ else
+ j = mod(j, n);
+ b = sqmult(a, (n-1)/2, n, '*', 1);
+
+ isPrime = (j == b);
+ end
+
+ end
+
+end
\ No newline at end of file