Vi er ikke helt færdige med Fermats primtalstest.
I afsnittet om Fermats primtalstest diskuterer jeg hvordan man kan teste om et stort tal m er et primtal.
Mere præcist; vi så på hvor mange af tallene a = 1,2,3, …, m – 1 som opfylder at
\[a^{m-1} \equiv 1 \textrm{ mod } m \]
Hvis m er et primtal, så skal \[a^{m-1} \equiv 1 \textrm{ mod } m \] for alle værdier af a, fra a = 1, til a = m – 1.
Hvis vi bare har en værdi af a, så \[a^{m-1}\] ikke er lig 1, modulo m, så kan m ikke være et primtal.
Vi så også, at for langt de fleste tal m, som ikke er primtal, så vil de a‚er, hvor \[a^{m-1} \equiv 1 \textrm{ mod } m \], typisk kun udgøre få procent af samtlige a‚er fra a = 1 til a = m -1.
I dette afsnit vil vi ikke se på alle værdier af a, fra a = 1 til a = m – 1. Vi vil kun se på de værdier af a som er primiske med m.
Python-program
Ved at ændre minimalt i python-programmet fra forrige afsnit, så kan jeg, for hver værdi af m, optælle hvor mange af a‚erne der både er primiske med m, og som giver 1, når a opløftes i potensen m – 1. Vi regner naturligvis modulo m.
import math mmax=1000 for m in range(1,mmax+1): antal=0 antal_primiske=0 for a in range(1,m): if math.gcd(a,m)==1: antal_primiske+=1 if pow(a,m-1,m)==1: antal+=1 print(m,antal_primiske,antal)
I pakken math, som vi importerer, ligger funktionen gcd, som beregner den største fælles divisor for to tal.
Jeg har brugt antal_primiske til at tælle de a‚er som er primiske med m.
Jeg har brugt antal til at tælle de a‚er som opfylder at \[a^{m-1} \equiv 1 \textrm{ mod } m \]. Bemærk at antal kun forøges hvis a både er primiske med m og \[a^{m-1} \equiv 1 \textrm{ mod } m \].
Eksempel på output af første resultater:
1 0 0 2 1 1 3 2 2 4 2 1 5 4 4 6 2 1 7 6 6 8 4 1 9 6 2 10 4 1
I hver række står der tre tal;
- Første tal er værdien af m.
- Andet tal er antallet af a‚er, fra a = 1, til a = m -1, der er primiske med m.
- Tredie tal er antallet af de tal, der er primiske med m, som også opfylder at \[a^{m-1} \equiv 1 \textrm{ mod } m \].
Række 2: Når m = 2, så er der ét tal der er primisk med m; det er tallet 1. Og tallet 1 opfylder, at \[1^{2-1} \equiv 1 \textrm{ mod } 2 \]. Derfor står der i række 2; „2 1 1‟
\[1^{4-1} = 1^3 = 1 \equiv 1 \textrm{ mod } 4\]
\[3^{4-1} = 3^3 = 27 \equiv 3 \textrm{ mod } 4\]
Række 3: Når m = 3, så er der to tal som er primiske med m, og for begge de to tal gælder at \[a^{m-1} \equiv 1 \textrm{ mod } m \]:
\[1^{3-1} = 1^2 = 1 \equiv 1 \textrm{ mod } 3\] \[2^{3-1} = 2^2 = 4 \equiv 1 \textrm{ mod } 3\]
Række 4. Når m = 4, så er der to tal som er primisk med m. Det er tallene 1 og 3. Opfylder de at \[a^{m-1} \equiv 1 \textrm{ mod } m \] ?
\[1^{4-1} = 1^3 = 1 \equiv 1 \textrm{ mod } 4\] \[3^{4-1} = 3^3 = 27 \equiv 3 \textrm{ mod } 4\]
Så det er kun tallet a = 1 der både er primisk med 4 og som opfylder at \[a^{m-1} \equiv 1 \textrm{ mod } m \].
Figur
Jeg har, for alle værdier af m fra m = 1 til m = 105, optalt antal a‚er der er primiske med m, og antal a‚er som både er primiske med m og som opfylder at \[a^{m-1} \equiv 1 \textrm{ mod } m \].
Jag har så divideret antal med antal_primiske, og omregnet til procent.
Figuren viser resultaterne:

De værdier af m hvor procenten er 100 er primtallene. Når m er et primtal, så vil alle værdier af a, fra a = 1 til a = m – 1, både være primiske med m og opfylde at \[a^{m-1} \equiv 1 \textrm{ mod } m \].
Man kan så omvendt spørge; findes der værdier af m, som ikke er primtal, hvor der for alle a‚er, som er primiske med m, også gælder at \[a^{m-1} \equiv 1 \textrm{ mod } m \] ?
Svaret er ‚ja‛, der findes sammensatte tal m som opfylder, at der for alle a‚er primiske med m, gælder at \[a^{m-1} \equiv 1 \textrm{ mod } m \].
Disse tal kaldes Carmichael-tal. Det mindste af disse tal er 561. Der er 320 tal fra a = 1 til a = 560 som er primiske med 561. For alle disse 320 værdier af a gælder der at \[a^{560} \equiv 1 \textrm{ mod } 561 \].
Tallet 561 er ikke et primtal; \[561 = 3 \cdot 11 \cdot 17\].
Hvis vi derfor vil teste om et tal m er et primtal, og kun kontrollerer for a‚er der er primiske med m, så kan vi komme ud for værdier af m hvor alle a‚er opfylder ligningen \[a^{m-1} \equiv 1 \textrm{ mod } m \].
Figuren viser situationen.
