06.08.2013 Views

Heltals-Aritmetik

Heltals-Aritmetik

Heltals-Aritmetik

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Heltals</strong>-<strong>Aritmetik</strong><br />

Definition: Hvis a og b er heltal og der findes et heltal k så b = ka<br />

da siges at a går op i b hvilket skrives a|b. Der siges ligeledes at a er<br />

en divisor for b.<br />

Simple egenskaber<br />

Hvis a, b og c er heltal da gælder følgende :<br />

• Hvis a|b og a|c da vil a|(b + c)<br />

• Hvis a|b da vil a|b · c<br />

• Hvis a|b og b|c da vil a|c<br />

• Hvis a|b og a|c da vil a|sb + tc for alle heltal s og t.<br />

1


Primtal<br />

Definition: Et heltal p > 1 kaldes et primtal hvis de eneste tal der<br />

går op i p er tallene ±1 og ±p. Et tal som ikke er et primtal kaldes<br />

sammensat.<br />

<strong>Aritmetik</strong>kens Fundamentalsætning: Ethvert positivt heltal<br />

kan på entydig vis skrives som produkt af primtal.<br />

sætning: Hvis n er et positivt sammensat heltal da findes en<br />

divisor k for n så k ≤ √ n.<br />

sætning (Euklid): Der findes uendelig mange primtal.<br />

2


sætning (Divisions Algoritmen): Hvis a og d er heltal så d > 0<br />

da findes entydige heltal q og r så 0 ≤ r < d således a = dq + r.<br />

Vi skriver at q = a div d og r = a mod d.<br />

Definition: Hvis a, b og m er heltal så m ≥ 1, da skrives at<br />

a ≡ b(mod m) hvis m|a − b.<br />

egenskaber<br />

Hvis m er et positivt heltal, a ≡ b(mod m) og c ≡ d(mod m) da vil<br />

• a + c ≡ b + d(mod m) og<br />

• ac ≡ bd(mod m).<br />

3


Definition: Hvis a og b er heltal som ikke begge er lig 0 da kaldes<br />

det største heltal d så d|a og d|b den største fælles divisor af a og b.<br />

d betegnes da som gcd(a, b).<br />

Definition: To heltal a og b kaldes indbyrdes primske hvis<br />

gcd(a, b) = 1.<br />

Definition: Det mindste fælles multiplum af to heltal a og b er det<br />

mindste positive heltal som både a og b er divisorer for. Det<br />

mindste fælles multiplum for a og b betegnes lcm(a, b).<br />

4


Euklids algoritme<br />

Problem : Hvordan findes den største fælles divisor mellem to tal.<br />

lemma: Hvis a = bq + r hvor a, b, q og r er heltal. Da er<br />

gcd(a, b) = gcd(b, r).<br />

Fra divisionsalgoritmen følger det at der for heltal a og b findes<br />

følger af heltal r0, r1, . . .,rn og q1, q2, . . .,qn så r0 = a, r1 = b og<br />

r0 = r1q1 + r2<br />

r1 = r2q2 + r3<br />

r2 = r3q3 + r4<br />

.<br />

rn−2 = rn−1q3 + rn<br />

rn−1 = rnqn + 0.<br />

5<br />

0 ≤ r2 < r1<br />

0 ≤ r3 < r2<br />

0 ≤ r4 < r3<br />

0 ≤ rn < rn−1


Det følger af lemmaet at<br />

gcd(a, b) = gcd(r0, r1) = gcd(r1, r2) = · · ·<br />

= gcd(rn−1, rn) = gcd(rn, 0) = rn.<br />

1. procedure gcd(a,b : positive heltal)<br />

2. x:= a<br />

3. y:=b<br />

4. while y = 0 do<br />

5. r:= x mod y<br />

6. x:=y<br />

7. y:=r<br />

8. return x<br />

antal gennemløb af løkke : O(log(min(a,b)))<br />

Det følger fra euklids algoritme at der for heltal a og b findes heltal<br />

s og t så<br />

gcd(a, b) = sa + tb.<br />

6


Repræsentation af heltal<br />

sætning: Lad b ≥ 2 være et heltal. Hvis n er et positivt heltal da<br />

kan n entydigt repræsenteres ved a0, . . .,ak hvis der skal gælde at:<br />

n = akb k + ak−1b k−1 + . . . + a1b 1 + a0<br />

hvor k er et ikke-negativt heltal, a0, . . .,ak er ikke-negative heltal<br />

mindre end b og ak = 0.<br />

Bemærk: Ved b = 2 fås binær repræsentation.<br />

Eksempel med b=2 : Tallet 488 kan her repræsenteres ved<br />

1,1,1,1,0,1,0,0,0 (binært : 111101000) da<br />

488 = 2 8 + 2 7 + 2 6 + 2 5 + 2 3 .<br />

Eksempel med b=16 : Her kan 488 repræsenteres ved 1,14,8 da<br />

488 = 16 2 + 14 · 16 + 8. (hexadecimal 1E8)<br />

7


1. procedure base b rep(n : positivt heltal)<br />

2. q:= n<br />

3. k:=0<br />

4. while q = 0 do<br />

5. ak:= q mod b<br />

6. q:=⌊ q<br />

b ⌋<br />

7. k:=k+1<br />

8. return ak−1, ak−2, . . .,a0<br />

8


Addition og multiplikation mellem binære tal<br />

1. procedure add(an−1an−2 · · ·a0, bn−1bn−2 · · ·b0: binære heltal)<br />

2. c:=0<br />

3. for j := 0 to n-1 do<br />

4. d:= ⌊ aj+bj+c<br />

2 ⌋<br />

5. sj:=aj + bj + c − 2d<br />

6. c:=d<br />

7. sn:=c<br />

8. return sn, sn−1, . . .,s0<br />

Tidskompleksitet : O(n)<br />

9


1. procedure mult(an−1an−2 · · ·a0, bn−1 · · ·b0: binære heltal)<br />

2. for j := 0 to n-1 do<br />

3. if bj:=1 then cj := a shifted j pladser<br />

4. else cj:=0<br />

5. p:=0<br />

6. for j := 0 to n-1 do<br />

7. p := add(p,cj)<br />

8. return p<br />

Tidskompleksitet : O(n 2 )<br />

10


Div og mod<br />

1. procedure divogmod(a: heltal, d positivt heltal)<br />

2. q := 0<br />

3. r := |a|<br />

4. while r ≥ d do<br />

5. r:=r-d<br />

6. q := q + 1<br />

7. if a < 0 og r > 0 then<br />

8. r := d − r<br />

9. q := −(q + 1)<br />

10. return q og r<br />

Tidskompleksitet : O(q · log a) hvis q = a div d<br />

11


modulær eksponering<br />

1. procedure modeks(b : int, m : postiv int, ak−1ak−2 · · ·a1a0<br />

binært tal)<br />

2. x := 1<br />

3. power := b mod m<br />

4. for i:= 0 to k-1 do<br />

5. if ai = 1 then x:= (x· power) mod m<br />

6. power:=(power · power) mod m<br />

7. return x (x = b n mod m hvor n er det binære tal<br />

ak−1ak−2 · · ·a1a0)<br />

Tidskompleksitet : O((log m) 2 log n)<br />

12

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!