Fermats lille sætning

I stedet for bare at opskrive Fermats lille sætning, som sikkert ikke siger ret mange ret meget, så lad os se på nogle eksempler.

Ideen er, som i det foregående, at få nogle mentale billeder af hvad det er Fermats sætning handler om og hvad sætningen udtaler sig om.

Når man kan se det for sig, så bliver det lettere at forstår selve sætningen, og dermed bliver det lettere at huske sætningen, og det bliver lettere at kunne anvende den, nu man ved hvad den handler om.

Lad os begynde med at se på \(\mathbb{Z}_5\):

\(\mathbb{Z}_5 = \{0, 1, 2, 3, 4  \}\)

Vi har, i et tidligere afsnit, set på hvordan man regner i \(\mathbb{Z}_5\). Regnereglerne er nedarvet fra regning med hele tal, man skal bare huske, at får man et resultat udenfor mængden \(\{0, 1, 2, 3, 4\}\), så skal man ‘føre’ det tilbage til mængden \(\mathbb{Z}_5\). Det kan man gøre ved, som tidligere, at udfylde en tabel, og så gå lodret op mod tallene 0, 1, 2, 3, 4. Eller man kan dividere resultatet med 5, og så se på ‘resten’ ved divison med 5.

Vi tager nu elementet ‘3’ fra \(\mathbb{Z}_5\). Vi udregner så potenser af dette tal:

\( 3^1 = 3 \quad 3^2=9 \equiv 4 \quad 3^3=27 \equiv 2 \quad 3^4=81 \equiv 1 \)

Det var så nogle potenser af 3.

Lad os prøve at beregner potenser af alle elementerne i \(\mathbb{Z}_5\).

Vi opskriver resultaterne i en tabel. I første række har vi de fem elementer i \(\mathbb{Z}_5\), her skrevet med fed skrift. I første søjle står eksponenterne, dvs. de tal som vi opløfter i.

01234
101234
201441
301324
401111
Tabel over potenser af elementer i \(\mathbb{Z}_5\)

Kolonnen med tallene markeret med fed grøn skrift svarer til resultatet af de beregninger vi lige udførte med potenser af 3 i \(\mathbb{Z}_5\). Det sidste tal i denne kolonne er tallet 1, der er farvet rødt.

De fire tal i tabellen, markeret med fed rød skrift, fortæller at

\( 1^4 \equiv 1 \quad 2^4 \equiv 1 \quad 3^4 \equiv 1 \quad 4^4 \equiv 1 \quad \)

Det ser altså ud som om at alle elementer i \(\mathbb{Z}_5\) (dog ikke tallet 0) giver 1 når det ganges med sig selv 4 gange.

For \(\mathbb{Z}_5\) har vi altså, for a = 1, a = 2, a = 3 eller a = 4, at

\(a^{5-1} \equiv 1\)

Det kunne jo være at det bare var en egenskab ved \(\mathbb{Z}_5\).

Lad os derfor se på \(\mathbb{Z}_7\), og lave en tilsvarende tabel. Vi har de 7 elementer 0, 1, 2, 3, 4, 5, 6 i første række, og eksponenterne i første søjle.

0123456
10123456
20142241
30116166
40124421
50145236
60111111
Tabel over potenser af elementer i \(\mathbb{Z}_7\)

Ser vi på tallene i sidste række, der igen er skrevet med rød fed skrift, så ser vi at

\( 1^6 \equiv 1 \quad 2^6 \equiv 1 \quad 3^6 \equiv 1 \quad 4^6 \equiv 1 \quad 5^6 \equiv 1 \quad 6^6 \equiv 1 \)

Nu vil nogen måske hævne at tallene 5 og 7 er lidt specielle tal; det er nemlig primtal. Men jeg kunne have valgt alle andre primtal, så ville resultatet være det samme. Man kan så spørge hvad der vil ske hvis man ser på f.eks. \(\mathbb{Z}_{10}\), hvor tallet 10 jo ikke er et primtal da \( 10 = 2 \cdot 5\). Det ser vi ikke på her, men det kommer vi tilbage til i et senere afsnit: Eulers sætning.

I tabellen med potenserne af alle a‘er i \(\mathbb{Z}_5\) stoppede vi ved fjerde portens. Hvordan ville den næste række se ud? Det er ret let at svare på, for \(a^5 = a \cdot a^4\), så vi kommer fra række fire til række fem ved at gange med a. Da der i række fire står en masse 1’taller, så vil der i række fem står tallene 0, 1, 2, 3, 4.

01234
101234
201441
301324
401111
501234
Tabel over potenser af elementer i \(\mathbb{Z}_5\)

Fermats lille sætning

Vi kan nu formulere Fermats lille sætning.

Vi ser på mængden \(\mathbb{Z}_p\), hvor p er et primtal. Når vi bruger tegnet \(\equiv\) så mener vi kongruent mht. \(\mathbb{Z}_p\), altså at vi tager et vilkårligt helt tal, og ved brug af tabellen forklaret tidligere fører det lodret op i et af tallene 0, 1, 2, 3, … , p-1. Alternativt, at vi dividerer tallet med p og ser på ‘resten’.

Lad p være et primtal, og lad a være et element i \(\mathbb{Z}_p\).
Er a ikke nul, så er \( a^{p-1} \equiv 1 \)

Mere generelt:

Lad p være et primtal, og lad a være et vilkårligt helt tal. 
Hvis p ikke går op i a, så er \(a^{p-1} \equiv 1\)

Vi kan også formlere Fermats lille sætning på følgende måde:

Lad p være et primtal, og lad a være et vilkårligt helt tal.
Da er \(a^p \equiv a\)

Man kan spørge om hvorfor der, i sidste version af Fermats lille sætning, ikke står noget med at p ikke må gå op i a. Forklaringen er, at hvis p ikke går op i a, så er \(a^{p-1} \equiv 1\), og ganger vi med a, så får vi at \(a^p \equiv a\). Det er det sætningen siger, så det er ok. Går p derimod op i a, så er \(a \equiv 0\), og dermed er, helt automatisk, \(a^p \equiv 0\). Så den sidste sætning gælder også hvis p går op i a, men resultatet er så ret trivielt at ‘0 = 0’.

For at slutte afsnittet af: Som billede på Fermats lille sætning, betragt den første tabel:

Vi ser på mængden \(\mathbb{Z}_5\). Tabellen indeholder potenser af elementerne 0, 1, 2, 3, 4 fra \(\mathbb{Z}_5\). I række 4, stå der en masse 1’taller. Det er Fermats lille sætning der siger at der skal stå 1’taller i række fire, dog ikke under 0.

Python-program

Det er, sådan set, ret trivielt at udfylde tabellerne herover med resultater. Skal man f.eks. beregne \(3^4\), så kan man gøre følgende:

\( 3^1 \equiv 3 \)
\( 3^2 \equiv 3 \cdot 3 = 9 \equiv 4 \)
\( 3^3 = 3 \cdot 3^2 \equiv 3 \cdot 4 = 12 \equiv 2 \)
\( 3^4 = 3 \cdot 3^3 \equiv 3 \cdot 2 = 6 \equiv 1 \)

Vi går altså et skridt frem ad gangen, og reducerer hver gang så vi bliver indenfor \(\mathbb{Z}_5\). På den måde udngår vi for store tal, og vi får samme resultat som hvis vi bare beregnede \(3^4\) og så, bagefter, reducerede til \(\mathbb{Z}_5\).

Man kan også lave et lille Python-program som udfører beregningerne for en:

n = int( input('Indtast et helt tal ') )

print("   ",end=' ')
 for j in range (0,n):
     print(format(j, '3d'),end=' ')

 print(' ')
 for i in range (1,n):
     print(format(i, '3d'),end=' ')
     for j in range (0,n):
         print(format((j**i) % n,'3d'),end=' ')
     print(' ')

Jeg har ikke kommenteret programmet, men først skrives tallene 0, …, n i første række. Der indledes med nogle mellemrum så alt kommer til at stå pænt.

Så kommer der to løkker; den første, den med i, er en løkke for eksponenten, og for hver værdi af eksponenten i beregnes \(j^i\) for j = 0, 1, 2, 3, … , n-1 som skrives i samme række, så ny række, ny eksponent i, …

Eksempel på output når n = 17:

Bemærk at vi regner i \(\mathbb{Z}_{17}\) , og at der står en masse 1-taller i række 16.

Restklasseregning

Vi vi i dette afsnit se på restklasserne \({ \:0, \:1 , \:2, \:3, \:4 }\).

Vi skal se på hvordan man lægger to elementer sammen og hvordan man ganger to elementer med hinanden.

Vi bruger symbolet ‘\(+\)‘ for gange, og vi bruger symbolet ‘\(\cdot\)‘ for gange.

Vores legeplads i dette afsnit er altså de fem elementer \({ \:0, \:1 , \:2, \:3, \:4 }\), og vi skal se på regler for hvordan man lægger to elementer sammen og hvordan man ganger to elementer.

Det, at vi har valgt at kalde de fem elemener i \(\mathbb{Z}_5\) for 0, 1, 2, 3, 4 er forpligtende. Skal man addere 1 og 2, så skulle man gerne få 3. Sådan er det med de helt tal. Det vil være forvirrende hvis 1 + 2 = 4.

Vi går lige til sagen. Vi laver en tabel for addition og en tabel for multiplikation:

+01234
001234
112340
223401
334012
440123
Additionstabel
\(\cdot\)01234
000000
101234
202413
303142
404321
Multiplikationstabel

Den måde tabellerne udfyldes på, er ved at se på det talskema vi har set tidligere:

01234
56789
1011121314
1516171819
2021222324

Som almindelige hele tal har vi f.eks. at 2 + 3 = 5. Men 5 er kongruent med 0, så i vores mængde \(\mathbb{Z}_5\) er \(2 + 3 =5 \equiv 0 \), og der ser man i additionstabellen.

På samme måde så vil der for de helt almindelige hele tal gælde, at \(4 \cdot 4 = 16\). Men da 16 er kongruent med 1, så gælder i \(\mathbb{Z}_5\) at \(4 \cdot 4 = 16 \equiv 0\). Det ser vi også i multiplikations-tabellen.

For at lave regneregnerne for de fem elementer i \(\mathbb{Z}_5\), så går vi altså nogle gange ‘ud’ af mængden \(\{ \:0, \:1 , \:2, \:3, \:4 \}\) , men med kongruens fører vi resultatet tilbage igen til mængden \(\{ \:0, \:1 , \:2, \:3, \:4 \}\).

Dette afsnit hedder restklasser, og det er præcis det mængen \(\mathbb{Z}_5\) bestående af 5 elemener er, med de regneregler der er defineret i de to tabelle.

Det er desuden klart hvad \(\mathbb{Z}_5\) er, og det burde være klart hvordan vi regner i \(\mathbb{Z}_5\).

I de næste to afsnit ser vi på \(\mathbb{Z}_n\) og \(\mathbb{Z}_n^{*}\).

Kongruens

Vi vil nu se på mængderne

\(\mathbb{Z}_n\) og \(\mathbb{Z}^{*}_n\)

Inden vi kommer dertil skal vi se på begrebet kongruens.

Kongruens, og restklasser som vi ser på i næste afsnit, spiller en stor rolle inden for talteorien, og ligger til grund for f.eks. RSA kryptering.

I princippet kan man klare definitionerne af kongruens og restklasser på et par linier, men så forsvinder forståelsen.

Det med kongruens og restklasser lyder måske svært, men det er det på ingen måde.

Formålet med de næste afsnit er at forklare begreberne på en sådan måde, at læseren ikke bare præsenteres for færdige begreber, men også får en forståelse for hvad der foregår, og, hvad der også er vigtigt, ser nogle indre billeder for sig, når snakken handler om to begreber.

Vi har før set på de hele tal. Symbolet for de hele tal er \(\mathbb{Z}\) , og det er mængden

\(\mathbb{Z} = \{ \: ... , \: -3 \: , \: -2 \: , \: -1 \: , \: 0 \:, \: 1 \: , \: 2 \: , \: 3 \: , \: ... \}\)

Lad os tage de første ca. 50 hele tal og skrive dem ind i en tabel.

01234
56789
1011121314
1516171819
2021222324
2526272829
3031323334
3536373839
4041424344
4546474849
Kongruens modulo 5

En række i en tabel er tal der står ved siden af hinanden.
En søjle i en tabel er tal der står lodret over hinanden.

Vi indfører nu et nyt tegn: \(\equiv\)

Tegnet \(\equiv\) læses ‘kongruent med’. Ordet ‘kongruent’ betyder noget i retningen af at være ens. Konkruente figurer er figurer der, ved at flytte dem rund, kan lægges 100% ovenpå hinanden.

Betragt tabellen herover. To tal er kongruente, hvis de hører til i samme søjle i tabellen.

F.eks. er \(17 \equiv 42\) og \(35 \equiv 0\).

Alle tal i samme søjle er kongruente med hinanden.

Det er klart at ethvert helt tal er kongruent med enten 0, 1, 2, 3 eller 4.

Når vi har tallene 0, 1, 2, 3, 4 i første række, så siger man at man ser på kongruens modulo 5.

Hvis vi vil se på kongruens modulo 7, så skal vi bare have tallene 0, 1, 2, 3, 4, 5, 6 i første række:

0123456
78910111213
14151617181920
21222324252627
28293031323334
35363738394041
42434445464748
49505152535455
56575859606162
Kongruens modulo 7

Når vi ser på kongruens modulo 5, så er \(10 \equiv 0\).

Når vi ser på kongruens modulo 7, så er \(10 \equiv 3\).

Hvis man både ser på kongruens modulo 5 og kongruens modulo 7,. så er det altså ikke klart om \(10 \equiv 0\) eller \(10 \equiv 3\). Derfor skriver man f.eks.

\(10 \equiv_5 0\)

og

\(10 \equiv_7 3\)

Man kan også skrive

\(10 \equiv 0 \textrm{  (mod 5)}\)

og

\(10 \equiv 3 \textrm{  (mod 7)}\)

Jeg vil holde mig til første skrivemåde, idet den anden med (mod 5) let bliver uoverskuelig når der står (mod 5) mange gange i samme linie.

Er det klart at vi f.eks. ser på kongruens modulo 5, så skrives bare \(\equiv\) uden 5’tallet for neden.

Talmængder

I dette afsnit introduceres de hele tal og de naturlige tal.

Senere skal vi se på

\(\mathbb{Z}_n\) og \(\mathbb{Z}^{*}_n\)

Det er disse der anvendes i kryptologi. De kommer begge fra mængden af hele tal.

De hele tal

De hele tal er tallene \(… , -5 , -4, -3 , -2 , -1 , \:0 , \:1 , \:2 , \:3 , \:4 , \:5 , …\)

De tre punktummer på begge sider betyder bare, at talrækken fortsætter i begge retninger.

Mængden af alle hele tal skrives \(\mathbb{Z}\).

Dermed er

\(\mathbb{Z} = \{..., -5 , -4, -3 , -2 , -1 , \:0 , \:1 , \:2 , \:3 , \:4 , \:5 ,...\}\)

Vi kan lægge to hele tal sammen: \(2 + 3 = 5\)
Vi kan trække et helt tal fra et andet helt tal: \(7 – 4 = 3\)
Vi kan gange to hele tal: \( 2 \cdot 5 = 10 \)

Der er naturligvis andre regneoperationer end plus, minus og gange, men pointen er, at vi har en mængde af objekter, her de hele tal, og nogle regneoperationer som vi kan bruge sammen med de hele tal.

De naturlige tal

De naturlige tal er alle de positive hele tal. Man bruger symbolet \(\mathbb{N}\) for de naturlige tal:

\(\mathbb{N} = \{\:1 , \:2 , \:3 , \:4 , \:5 ,...\}\)

Nogle vælger at bruge symbolet \(\mathbb{N}_0\) for mængden af de positive hele tal, inklusive tallet 0.