Heltals-Aritmetik
Heltals-Aritmetik
Heltals-Aritmetik
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