Viser til tidlegare ulikheit-maraton. Dette "løpet" gjekk over fleire månader før interessa slokna.
Inviterer hermed til eit tilsvarande løp i programmering.
Startar " kronerullinga" med å presentere dette problemet:
Lag eit dataprogram i Python-kode som plukkar ut og skriv ut alle primtal mindre enn 100.
Programvare: https://trinket.io/python3
Programmering - maraton
Moderatorer: Aleks855, Gustav, Nebuchadnezzar, Janhaa, DennisChristensen, Emilga
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.
Oppfølger: Finn summen av arealene til sirklene med radius $1, 2, 3, \ldots, 100$. Avrund svaret til nærmeste heltall.
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.
Kode: Velg alt
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)])
-
- Cauchy
- Innlegg: 208
- Registrert: 26/02-2021 21:28
Problem: Lage eit dataprogram i Python-kode som reknar ut summen av areala til alle sirklar med radius f.o.m. r = 1 t.o.m. r = 100
Dette er eit relativt greitt problem utan vilkårtest ( ingen if-setningar ). Lagar ei FOR-løkke og summerer:
1) areal = 0 ; sum = 0 ; pi = 3.14
2) for i in range(1 , 101 ):
3) sum = sum + i*i
4) areal = sum * pi
5) print( " Samla areal: " , round(areal ) )
P.S. Greidde ikkje å kopiere programmet eg køyrde på PC-en. Skriv difor instruksjonane " for hand".
Oppfølgar: Legge inn n tal( element) i ei liste og sortere desse etter stigande verdi.
Dette er eit relativt greitt problem utan vilkårtest ( ingen if-setningar ). Lagar ei FOR-løkke og summerer:
1) areal = 0 ; sum = 0 ; pi = 3.14
2) for i in range(1 , 101 ):
3) sum = sum + i*i
4) areal = sum * pi
5) print( " Samla areal: " , round(areal ) )
P.S. Greidde ikkje å kopiere programmet eg køyrde på PC-en. Skriv difor instruksjonane " for hand".
Oppfølgar: Legge inn n tal( element) i ei liste og sortere desse etter stigande verdi.
Når jeg kjører dette så får jeg verdien $1062419$ men det egentlige svaret er $1062958$.Mattebruker skrev: ↑21/05-2022 21:45 Problem: Lage eit dataprogram i Python-kode som reknar ut summen av areala til alle sirklar med radius f.o.m. r = 1 t.o.m. r = 100
Dette er eit relativt greitt problem utan vilkårtest ( ingen if-setningar ). Lagar ei FOR-løkke og summerer:
1) areal = 0 ; sum = 0 ; pi = 3.14
2) for i in range(1 , 101 ):
3) sum = sum + i*i
4) areal = sum * pi
5) print( " Samla areal: " , round(areal ) )
Feilen er funnet, men feilsøking er en enormt viktig del av det å skrive kode, så du må få sjansen til å rette det opp

-
- Cauchy
- Innlegg: 208
- Registrert: 26/02-2021 21:28
Kanskje ligg feilen her ? pi = 3.141592654 ( 9 siffer bak desimalkomma )
Det stemmer. En avrundingsfeil så tidlig i utregninga får en eksplosiv effekt når vi multipliserer det med så store tall som her.
Python har et innebygd "math"-bibliotek som blant annet har diverse viktige konstanter tilgjengelig.
lar deg hente denne, og deretter bare bruke "pi" som du får derfra.
Python har et innebygd "math"-bibliotek som blant annet har diverse viktige konstanter tilgjengelig.
Kode: Velg alt
from math import pi