Fermats lilla sats
a^p ≡ a (modp).
där p är ett primtal och a tillhör N , försöker o testa funktionen i MATLAB men det funkar inte med alla tal på a eller p
förstår inte vrf ? ska inte den gälla för alla naturliga tal på a
Jo det gäller för alla heltal a så länge p är ett primtal.
Hur ser matlab-koden ut som du använder dig av?
function [ b ] = testfermat( a,p )
%
a=17
p= 13
% Test Fermats lilla sats
b = (mod(a^p,p) == mod(a,p))
end
testade då a = 3,60 funkar men inte då a= 17 eller 25
Problemet är att det inte går att representera 17^13 tillräckligt exakt. För att beräkna det korrekt så använd denna funktion (om jag inte gjorde någon miss nu)
function m = powmod(a, p, n)
m = 1;
b = a;
while p > 0
if mod(p, 2) == 1
m = mod(m * b, n);
end
b = mod(b * b, n);
p = floor(p/2);
end
end
Denna beräknar , så för att beräkna så anropar man powmod(17, 13, 13).
förstår inte riktigt funktionen , vad är a,,n ,m
Funktionen beräknar alltså så om du vill beräkna så anropar du powmod(6, 302, 43).
m är variabeln som innehåller return värdet av funktionen.
Skulle du kunna förklara din funktion lite mer, tack!
Alltså varför du gör som du gör!
Problemet som måste lösas är att försöka hålla talen tillräckligt små så att de kan representeras av datorn.
Så själva idén är att använda binär representationen för p
Så nu vet man att
Nu är det alltså bara att skriva en loop som beräknat och multiplicera in denna faktor ifall är 1.