Processing math: 100%
8 svar
299 visningar
om#23 behöver inte mer hjälp
om#23 14
Postad: 3 okt 2017 22:47

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 

Stokastisk 3597 – Fd. Medlem
Postad: 3 okt 2017 22:50

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?

om#23 14
Postad: 3 okt 2017 23:04

function [ b ] = testfermat( a,p )
%
a=17
p= 13

% Test Fermats lilla sats
b = (mod(a^p,p) == mod(a,p))
end

om#23 14
Postad: 3 okt 2017 23:05

testade då a = 3,60 funkar men inte då a= 17 eller 25

Stokastisk 3597 – Fd. Medlem
Postad: 3 okt 2017 23:15

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 apmodn, så för att beräkna 1713mod13 så anropar man powmod(17, 13, 13).

om#23 14
Postad: 3 okt 2017 23:27

förstår inte riktigt funktionen , vad är a,,n ,m 

Stokastisk 3597 – Fd. Medlem
Postad: 3 okt 2017 23:30

Funktionen beräknar alltså ap mod n så om du vill beräkna 6302 mod 43 så anropar du powmod(6, 302, 43).

m är variabeln som innehåller return värdet av funktionen.

EmmaOls 7 – Fd. Medlem
Postad: 4 okt 2017 14:38

Skulle du kunna förklara din funktion lite mer, tack! 

Alltså varför du gör som du gör!

Stokastisk 3597 – Fd. Medlem
Postad: 4 okt 2017 15:16 Redigerad: 4 okt 2017 15:16

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

p=α0+2α1+22α2++2mαm

Så nu vet man att

apaα0·a2α1·a22α2a2mαm (mod n)

Nu är det alltså bara att skriva en loop som beräknat a2k och multiplicera in denna faktor ifall αk är 1.

Svara
Close