Uitwerkingen LES 4#

Opdracht 1 Som van Veelvouden van 5 en 7

Bekijk de getallen 5, 7, 10, 14, 15, 20, 21, 25, 28, 30, 35, … Dit zijn de eerste getallen die door 5 OF door 7 deelbaar zijn, of allebei.

De som van de eerste twee getallen is 12, de som van de eerste drie getallen is 22, etcetera.

Vind met python de som van alle veelvouden van 5 of 7 onder de 2000.

getal = 0
som = 0
while getal < 2000:
  if(getal%5 == 0 or getal%7  == 0):
    som = getal+som
  getal = getal+1

print(som)
626430

Opdracht 2 De som van even Fibonacci getallen.#

De fibonacci rij kan als volgt worden gedefinieerd:
u0 = 1
u1 = 1
u(n) = u(n-1)+ u(n-2)

In woorden: start met de getallen 1, 1 dan is de volgende term de som van de twee voorgaande termen. Je krijgt dan 1, 1, 2, 3, 5, 8, 13, 21, 34,…

Genereer de lijst van Fibonacci getallen tot 4.000.000, en vind de som van de oneven Fibonaccigetallen (1+1+3+5+13+…)

def fibo(f1,f2, grootte):
    fibolijst = [f1, f2]
    f3=f1+f2
    while f1+f2<grootte:
        f3 = f1+f2
        fibolijst.append(f3)
        f1 = fibolijst[-2]
        f2 = fibolijst[-1]
    return fibolijst

fiblijst = fibo(1,1,10)
print(fiblijst)
som = 0
for fib in fiblijst:
    if fib%2 == 1:
        som = som+fib
print(som)
    
[1, 1, 2, 3, 5, 8]
10

Opdracht 3 Grootste Palindroom Product#

Een palindroom getal is hetzelfde als je het van links naar rechts leest als andersom. Bijvoorbeeld 12321.

9009 = 91 x 99 is het grootste palindroomgetal dat je kan maken met twee tweecijferige getallen (91 en 99).

Vind de grootste palindroomgetal dat je kan maken met twee driecijferige getallen

def ispalindroom(getal):  # het gaat om driecijferige getallen, het grootste getal dat niet met 0 begint is 999*999 = 999801 en kleinste 12.321, dus het getal heeft of 5 of 6 cijfers
    # elk getal kan je opdelen in duizendtallen, honderdtallen, tientallen en eenheden. zo is 2351 = 2*1000 + 3*100+5*10+1. Dat gebeurd hieronder
    # er is een snellere manier, vraag maar aan chatgpt
    
    if getal>10000 and getal<100000:
        a = getal // 10000
        b = (getal % 10000) // 1000
        c = (getal % 1000) // 100
        d =(getal%100)//10
        e = getal%10
        if(a*10000+b*1000+c*100+d*10+e == e*10000+d*1000+c*100+b*10+a): #dit is een palindroomgetal, als abcde = edcba
            return True
    elif(getal>100000 and getal<1000000):
        a = getal // 100000
        b = (getal%100000)//10000
        c = (getal % 10000) // 1000
        d =(getal%1000)//100
        e = (getal%100)//10
        f = getal%10   
        if(a*100000 + b*10000+c*1000+d*100+e*10+f == f*100000+e*10000+d*1000+c*100+b*10+a):
            
            return True
    else:
        
        return False
        

grootstepalindroom = 0
for i in range(100,1000):
    for j in range(i, 1000):
        getal = i*j
        if(ispalindroom(getal)):
            if(getal>grootstepalindroom):
                grootstepalindroom = getal
    
print(grootstepalindroom)
906609

Opdracht 4 Een specifieke pythagorastriplet#

(Zie ook les 2) Een pythagoras triplet zijn drie gehele positieve getallen (a, b, c) met a < b < c waarvoor geldt: a^2 + b^2 = c^2.

Er is precies een pythagoras triplet waarvoor geldt a+b+c = 1000.

Genereer het product abc.

for a in range(1, 500):  # a moet kleiner zijn dan 500, want a < b < c
    for b in range(a + 1, 500):  # b moet groter zijn dan a
        c = 1000 - a - b  # c volgt direct uit de som
        if a**2 + b**2 == c**2:  # Check Pythagorese relatie
            print(a*b*c)
31875000

Opdracht 5 Een plot opdracht met priemgetallen#

Genereer eerst de eerste 10000 priemgetallen, zie een andere les hoe je dat ook alweer doet.

Kijk de eerste 3 minuten van het filmpje: https://www.youtube.com/watch?v=EK32jo7i5LQ&ab_channel=3Blue1Brown

Daar leer je heel kort iets over poolcoordinaten. Dat is eigenlijk best eenvoudig:

(x,y) is normaal x stapjes naar rechts en y stapjes omhoog in het (cartesisch) vlak.
Je kan een punt in het vlak ook aanwijzen met de afstand tot de oorsprong r en de hoek theta die je maakt met de positieve horizontale as. Dit noem je poolcoordinaten.

De wiskunde krijg je pas later bij wiskunde B, maar de omzetting van cartetisch naar poolcoordinaten is goed te doen:

x= rcos(theta)
y =r
sin(theta)

andersom r = x2 + y2 theta = arctan2(x,y)

Je opdracht is eigenlijk het plaatje wat je in het filmpje ziet nabouwen.

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

def polartocart(r,theta): #zet polar om nar cartetisch
  x = r*np.cos(theta)
  y = r*np.sin(theta)
  return x, y

def primes(n): #maak een lijst van de eerste n priemen

  if n <= 0:
    return []

  prime_list = []
  num = 2  # Start checking for primes from 2
  while len(prime_list) < n:
    is_prime = True
    for i in range(2, int(num**0.5) + 1):
      if num % i == 0:
        is_prime = False    #i is een deler van num, dus is num geen priem
        break               # dan hoeven we ook niet verder te kijken, dus stap uit
    if is_prime:            # als de for loop voltooid is, is num dus een priemgetal
      prime_list.append(num)
    num += 1
  return prime_list

xlist = []
ylist = []
rlist = []
thetalist = []
primelist = primes(1000)
print(primelist)
for i in range(0,len(primelist)):
  x,y  = polartocart(primelist[i],primelist[i])
  xlist.append(x)
  ylist.append(y)

plt.scatter(xlist,ylist)

#fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
#ax.plot(thetalist, rlist)
plt.show()