Tallfølger#
Tallfølger er tall som kommer i rekkefølge etter hverandre. Noen tallfølger gis med en formel, og andre gis ved en slags algoritme.
Her kommer noen vanlige tallfølger. Formlene under er gitt for tallene \(n\in \{0, 1, 2, 3, \dots\}\).
De ikke-negative heltallene
\(n\)
\(\{0, 1, 2, 3, 4, \dots\}\)
Partallene
\(2n\)
\(\{0, 2, 4, 6, 8, \dots\}\)
Oddetallene
\(2n + 1\)
\(\{1, 3, 5, 7, \dots\}\)
Kvadrattallene
\(n^2\)
\(\{0, 1, 4, 9, 16, \dots\}\)
Rektangeltallene
\(n(n+1)\)
\(\{0, 2, 6, 12, 20, \dots\}\)
Trekanttallene
\(\frac{n(n+1)}{2}\)
\(\{0, 1, 3, 6, 10, \dots\}\)
Programmere tallfølger med formel#
Vi kan enkelt programmere tallfølger med formel. Da kan vi finne ulike summer. Vi kan også finne hvilke tall som er i følgen, og hvilke som ikke er det.
La oss finne summen av de \(20\) første kvadrattallene og undersøke om tallet \(289\) er et kvadrattall.
s = 0 # Summen starter som null
for n in range(1, 21): # For-løkken går fra 1 til én mindre enn den siste parameteren, altså 20.
s += n**2 # Legger til summen. n**2 er formelen for kvadrattallene.
print(n, n**2) # Skriver ut indeks (plassering) og tall i tallfølgen.
print(f"Summen er {s}")
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
11 121
12 144
13 169
14 196
15 225
16 256
17 289
18 324
19 361
20 400
Summen er 2870
Som vi ser er tallet \(289\) et kvadrattall, det er nummer 17 i følgen. I tillegg er summen av de \(20\) første kvadrattallene lik \(2870\).
Programmere tallfølger med algoritme#
Det er ikke like lett å finne en formel for alle tallfølger. Noen ganger er det enklere å programmere tallfølgen fra en algoritme.
La oss se på fibonaccitallene. De er gitt ved denne algoritmen.
Start med tallene \(\{0, 1\}\)
Hvert neste tall er summen av de to forrige tallene.
La oss programmere starten på denne tallfølgen.
fib = [0, 1]
while len(fib) < 10:
ny_fib = fib[-1] + fib[-2] # Tar summen av det siste og det nest siste tallet i listen.
fib.append(ny_fib) # Legger inn tallet i listen.
print(fib)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Dette programmet legger inn det neste tallet i listen som summen av de to siste tallene så lenge listens lengde er under 10. Derfor skriver programmet ut de første ti fibonaccitallene.
Oppgaver#
Oppgave 1 📦
Hvis kvadrattallene er tallene med formel \(n^2\) når \(n\in \{1, 2, 3, \dots\}\) så må tallene med formel \(n^3\) hete kubikktallene.
Skriv ut summen av de første \(20\) kubikktallene og undersøk om \(6859\) er et kubikktall.
Løsningsforslag
s = 0
for n in range(1, 21):
s += n**3
print(n, n**3)
print("Summen av de 20 første kubikktallene:", s)
1 1
2 8
3 27
4 64
5 125
6 216
7 343
8 512
9 729
10 1000
11 1331
12 1728
13 2197
14 2744
15 3375
16 4096
17 4913
18 5832
19 6859
20 8000
Summen av de 20 første kubikktallene: 44100
Summen blir av de \(20\) første kubikktallene blir \(44\,100\) og vi ser at \(6859\) er et kubikktall. Det er kubikktall nr \(19\).
Oppgave 2 ✌️
Skriv ut de første 20 toerpotensene \(2^n\) hvor \(n \in \{1, 2, 3,...\}\). Har du sett disse tallene før?
Løsningsforslag
for n in range(1, 21):
print(2**n)
Toerpotensene er typisk tall for lagring i digitale enheter, f.eks 128 GB, 256 GB etc. Årsaken er at datamaskiner bruker bits, som kan være enten 0
eller 1
. To bits gir fire muligheter 00
, 01
, 10
og 11
. Fire bits gir \(2^4=16\) muligheter. Åtte bits gir \(2^8=256\) muligheter, etc. For effektiv lagring og minne brukes derfor også størrelser i toerpotenser.
Oppgave 3 🗼
Vi kan illustrere de tre første eiffeltallene på denne måten:
Vis at eiffeltall nr. \(n\) er gitt ved formelen \(E_n=\frac{n(n+3)}{2}\)
Undersøk om tallene \(787\) og \(989\) er eiffeltall og eventuelt hvilket nummer i rekkefølgen de er.
Hva er summen av de \(50\) første eiffeltallene?
Jeg vet ikke hvem som opprinnelig kom på navnet Eiffeltallene. Det er mulig navnet kommer fra Aschehougs bøker i matematikk på VGS.
Løsningsforslag
Eiffeltallene er satt sammen av trekanttallene \(\frac{n(n+1)}{2}\) og tallene \(\{1, 2, 3, \dots\}\). Derfor blir formelen
Ved å skrive ut de første \(50\) eiffeltallene kan vi se at \(787\) ikke er et eiffeltall. \(989\) er eifelltall nummer \(43\).
for n in range(1, 51):
print(n, n*(n+3)/2)
Vi finner summen med en løkke.
s = 0
for n in range(1, 51):
s += n*(n+3)/2
print("Summen av de 50 første eiffeltallene er:", s)
Summen av de 50 første eiffeltallene er: 23375.0
Oppgave 4 🐚
Se på koden for fibonaccitallene i eksempelet over.
Det gylne snitt \(\phi\approx 1.618\) er et viktig tall i matematikken. Hvis vi tar forholdet mellom et fibonaccitall og det forrige tallet, så vil verdien til dette forholdet bli mer og mer lik det gylne snitt desto lengre ut vi kommer i tallfølgen.
Det vil si at \(\phi \approx \frac{fib_n}{fib_{n-1}}\) når \(n\) er tilstrekkelig stor. For eksempel er \(\frac{13}{8}\approx 1.625\) og \(\frac{34}{21}\approx 1.619\)
Lag et program som regner ut det gylne snitt ved å bruke fibonaccitallene.
Fasit: Det gylne snitt
Det gylne snitt \(\phi\) er omtrent lik \(1.618033988749895\).
Oppgave 5 3️⃣
Tribonaccitallene er gitt ved følgende algoritme.
Start med tallene \(\{0, 1, 1\}\)
Det neste tallet er summen av de tre forrige tallene.
Lag et program som skriver ut de første 20 tribonaccitallene.
Oppgave 6 (utfordring) 🃏
Fakultet (factorial) er definert på denne måten.
\(n! = n \cdot (n-1) \cdot (n-2) \cdot ... \cdot 3 \cdot 2 \cdot 1\)
For eksempel er \(5! = 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 = 120\)
Lag et program som finner \(n!\) (\(n\) fakultet) for et gitt heltall \(n\).
Bruk programmet til å finne \(12!\).
Oppgave 7 (utfordring) 🔢
I denne oppgaven kan det være nyttig å se tilbake på Rest og heltallsdivisjon
Lag et program som skriver ut alle primtallene under \(100\).
Oppgave 8 (utfordring) 1️⃣
Collatz-følgen til et tall er definert på følgende måte
Del tallet på to hvis det er et partall.
Gang tallet med tre og legg til 1 hvis det er et oddetall.
Starter vi med tallet \(12\) blir collatz-følgen
\(12 \rightarrow 6 \rightarrow 3 \rightarrow 10 \rightarrow 5 \rightarrow 16 \rightarrow 8 \rightarrow 4 \rightarrow 2 \rightarrow 1\)
Summen av tallene i denne følgen er \(67\).
Finn summen av tallene i Collatz-følgen til tallet \(111\). Du kan anta at følgen stopper på tallet \(1\).
Collatz’ formodning (Collatz’ conjecture)
Antagelsen om at vi ender på tallet \(1\) er rimelig, men det er ingen som har klart å bevise at dette gjelder for alle positive heltall. Dette matematiske problemet kalles Collatz’ formodning (Collatz’ conjecture) og er et uløst problem i matematikken, til tross for at konseptet egentlig er ganske enkelt å forstå.