8 svar
279 visningar
om#23 är nöjd med hjälpen
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 a^p mod n , så för att beräkna 1713mod13 17^{13} mod 13 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 a^p\text{ mod n} så om du vill beräkna 6302 mod 43 6^{302}\text{ 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 p = \alpha_0 + 2\alpha_1 + 2^2\alpha_2 + \cdots + 2^m \alpha_m

Så nu vet man att

apaα0·a2α1·a22α2a2mαm (mod n) a^p \equiv a^{ \alpha_0}\cdot a^{2\alpha_1} \cdot a^{2^2\alpha_2}\cdots a^{2^m \alpha_m}\text{ (mod n)}

Nu är det alltså bara att skriva en loop som beräknat a2k a^{2^k} och multiplicera in denna faktor ifall αk \alpha_k är 1.

Svara Avbryt
Close