Kjempekult at du har laget en primtallkalkulator!
Som de ovenfor sier så finnes det masse smarte metoder for å bestemme om et tall 
er primtall elle ei. Grunnen til at dette er interessant er at alle banker bruker store primtall
for å hemmligjøre transaksjonene banken gjør.
For å bestemme om ett tall er primtall eller ei, liker jeg veldig godt 
Solovay-Strassen testen
http://planetmath.org/SolovayStrassenTest
Det behagelige er at en ikke må forstå all matematikken bak det. 
Tanken er at å primtallsfaktorisere et tall tar lang tid. Så derfor 
lar vi primtallet gå igjennom en algoritme eller sekvens. 
Dersom algoritmen gir ut 1 er vi 100% sikker på at tallet ikke er primtall. 
Dersom algoritmen gir ut 0 er sjangsen maksimalt 50% for at tallet ikke er primtall. 
Består primtallet testen to ganger, er sjangsen maksimalt 25% for at tallet ikke er primtall. 
Slik fortsetter det, lar vi primtallet gå igjennom testen 14 ganger er det 0.001% sannsynlighet for at
tallet ikke er primtall. Eller med andre ord 99% sikkert at tallet er primtall. 
En mindre optimal kode jeg skrev for herrens år siden ser slik ut. Syntaxen er maple
så kan du titte litt på den, prøve å se hva som foregår, og kanskje implementere noe liknende
i java. Spytter koden ut $0$ så er vi sikker på at tallet er sammensatt / ikke primsk. Spytter
den ut $1$ er vi ikke sikker enda. 
Code: Select all
% Her er n primtallet vi tester, og k er antall tester primtallet går igjennom.
% Sannsynligheten for at n er primtall dersom n består k tester er 
% P = 1 - 1/2^k 
function [ Y ] = solovay( n,k )
if mod(n,2)~=0
   p = (n-1)/2;
    for i = 1:k
        a = randi(n-1);
        if gcd(a,n)~=1
           Y = 0;
           return
        end
        
        jacobi = jacobi(a,n);
        mod = powermod(a, p, n);
        if jacobi<0
            jacobi = jacobi + n;
        end
        if mod ~= jacobi
           Y = 0; 
           return
        end
    end
Y = 1;
else
Y = 0;    
end