Fint tiltak! Jeg hiver meg på.
Primtallsarbeid er løselig på mange måter, men jeg går for en forholdsvis enkel en. Jeg lager en funksjon som tar et heltall og sjekker at ingen tall under det, deler det.
Det finnes gradvis mindre naive måter å gjøre det på.
For $n$, sjekk at $2, 3, 4, \ldots, n-1$ ikke deler det. Dette er den enkleste å skrive, men vi sjekker veldig mange tall som ikke har mulighet til å dele $n$. Eksempelvis sjekker vi tall som er større enn $\frac n2$.
Vi kan begrense søket til tall mindre enn $\sqrt n$, siden hvis vi ikke har funnet noen faktorer før det, så vil vi heller ikke finne par-faktoren som må være større.
Videre vil vi helst ikke sjekke alle partall. Så fort vi har sjekket at 2 ikke deler $n$, så vet vi at ingen andre partall deler $n$ heller. Så vi sjekker i stedet $3, 5, 7, \ldots$.
Det finnes enda bedre måter. For eksempel, hvis 3 ikke er en faktor, så er heller ikke $9, 15, 21 \ldots$ faktorer. Men det er her jeg velger å gå for lettvint kode fremfor maksimal optimalisering. Dersom måltallet ikke hadde vært 100, men $10^{10}$ så hadde jeg nok valgt annerledes.
Code: Select all
import math
def isPrime(n):
if n == 2:
return True
if n % 2 == 0:
return False
for i in range(3, math.ceil(math.sqrt(n) + 1), 2):
if n % i == 0:
return False
return True
print([n for n in range(2, 100) if isPrime(n)])
Oppfølger: Finn summen av arealene til sirklene med radius $1, 2, 3, \ldots, 100$. Avrund svaret til nærmeste heltall.