Uitwerkingen LES 2

Uitwerkingen LES 2#

OPDRACHT Genereer een lijst van even getallen onder de 100. Hieronder een begin. Herinner dat een getal even is als je het kan delen door 2, in python doe je dat met %.

Er zijn meerdere antwoorden mogelijk, hier zie je een paar

lijst = list(range(1,101))    #dit genereert een lijst van 1 tot en met 100
evenlijst = []                #dit wordt het lijstje van even getallen
for getal in lijst:
    if(getal%2==0):   #het getal is even als het deelbaar is door 2
        evenlijst.append(getal)    #noteer hier hoe je dan de evenlijst vult

print(evenlijst)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
#ALTERNATIEF

lijst = list(range(2,101,2))   #de derde argument van range is de stapgrootte, dat kunnen we hier al oproepen :-)
print(lijst)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
#ALTERNATIEF 2

getal = 2   #start met het getal 2, de eerste even getal
lijst = []  # een lege lijst
while getal<101:        # zolang het getal kleiner is dan 100
    lijst.append(getal) # voeg het getal toe aan de lijst
    getal = getal+2     # tel twee op bij het getal, die is namelijk dan ook even

print(lijst)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]

OPDRACHT

Maak een lijst van de eerste 20 positieve getallen die zowel deelbaar zijn door 3 als door 5. De eerste vijf getallen zijn dus 15, 30, 45, 60, 75 (0 tellen we NIET mee, dat is suf want is altijd ergens door deelbaar)
Print tenslotte de 10e getal in deze lijst, en tel daar dan de laatste getal in deze lijst bij op. Als je de opdracht goed hebt gedaan, is het antwoord 450

#noteer je code voor je opdracht hier, een klein begin is gemaakt
getal = 1
lijstje = []
while len(lijstje)<20:
    if(getal%3==0 and getal%5==0):   #met AND moet aan beide voorwaarden tegelijkertijd worden voldaan
        lijstje.append(getal)        # als aan beide voorwaarden is voldaan, dan voegen we het getal toe aan het lijstje
    getal = getal +1                 # verhoog niet het getal met 1

    
print(lijstje[9]+lijstje[-1])     # het 10e getal is index 9, en het laatste getal is OF index 19 of index -1, kan beide
450

Priemtweelingenopdracht Opdracht 1:
Maak een lijst van de eerste 100 priemtweelingen. Een priemtweeling is een paar priemgetallen die maar 2 verschillen, voorbeeld (3,5) en (5,7), …

def is_priem(getal):
    delers = list(range(2,int(getal**0.5+1)))  #we hoeven niet verder te controleren tot de wortel van getal, echter moet in list een geheel getal staan, dus maken met int er een integer van.
    for deler in delers:
        if getal%deler == 0:
            return False #het getal is deelbaar door deler, dus is het getal geen priem
    return True #omdat er nooit een False is geweest, moet het getal dus wel priem zijn



priemlijst=[]
for getal in range(2,100):
    if is_priem(getal):
        priemlijst.append(getal)


priemtweelingenlijst = []
getal1 = 3
getal2 = 5
while len(priemtweelingenlijst)<100:
    if(is_priem(getal2) and is_priem(getal1)):
        if(getal2 - getal1 == 2):
            priemtweelingenlijst.append((getal1,getal2))
    getal1 = getal1+2
    getal2 = getal2+2


print(priemtweelingenlijst)
[(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61), (71, 73), (101, 103), (107, 109), (137, 139), (149, 151), (179, 181), (191, 193), (197, 199), (227, 229), (239, 241), (269, 271), (281, 283), (311, 313), (347, 349), (419, 421), (431, 433), (461, 463), (521, 523), (569, 571), (599, 601), (617, 619), (641, 643), (659, 661), (809, 811), (821, 823), (827, 829), (857, 859), (881, 883), (1019, 1021), (1031, 1033), (1049, 1051), (1061, 1063), (1091, 1093), (1151, 1153), (1229, 1231), (1277, 1279), (1289, 1291), (1301, 1303), (1319, 1321), (1427, 1429), (1451, 1453), (1481, 1483), (1487, 1489), (1607, 1609), (1619, 1621), (1667, 1669), (1697, 1699), (1721, 1723), (1787, 1789), (1871, 1873), (1877, 1879), (1931, 1933), (1949, 1951), (1997, 1999), (2027, 2029), (2081, 2083), (2087, 2089), (2111, 2113), (2129, 2131), (2141, 2143), (2237, 2239), (2267, 2269), (2309, 2311), (2339, 2341), (2381, 2383), (2549, 2551), (2591, 2593), (2657, 2659), (2687, 2689), (2711, 2713), (2729, 2731), (2789, 2791), (2801, 2803), (2969, 2971), (2999, 3001), (3119, 3121), (3167, 3169), (3251, 3253), (3257, 3259), (3299, 3301), (3329, 3331), (3359, 3361), (3371, 3373), (3389, 3391), (3461, 3463), (3467, 3469), (3527, 3529), (3539, 3541), (3557, 3559), (3581, 3583), (3671, 3673), (3767, 3769), (3821, 3823)]

Opdracht 2:
Geef de langste collatzrij onder 100. Een Collatzrij is een reeks getallen dat aan de volgende voorwaarden voldoet:
als het getal even is, halveer het
als het getal oneven is, vermenigvuldig met 3 en tel er 1 op. Voorbeeld van zo’n rij: [10, 5, 16, 8, 4, 2, 1] Het is een open probleem of een collatzrij altijd eindigt. Het einde van de collatzrij is altijd 1: 1x3+1 = 4, dan kom weer 2 en 1 uit. De lengte van collatzrijen verschillen, en er is eentje die heel lang is. Wat is de lengte van die rij, en print die rij ook uit.

def collatzrij(k):
    collatzlist = [k]
    while k>1:
        if(k%2==0):
            k = int(k/2)
        elif(k%2==1):
            k = 3*k+1
        collatzlist.append(k)
    return collatzlist

langstecollatz = collatzrij(2)

for i in range(2,101):
    if(len(collatzrij(i)) > len(langstecollatz)):
       langstecollatz = collatzrij(i)

print("de langste rij is ",len(langstecollatz)," lang en is gelijk aan")
print(langstecollatz)
de langste rij is  119  lang en is gelijk aan
[97, 292, 146, 73, 220, 110, 55, 166, 83, 250, 125, 376, 188, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]

Opdracht 3:
Schrijf een functie om te checken of drie getallen een zogeheten Pyathagorastriple is. Een Pythagorastriple (a,b,c) heeft de eigenschap dat a^2 + b^2 = c^2 voor a, b, c gehele positieve getallen.

Gebruik deze functie vervolgens om alle pythagorastriplets te vinden met a, b, c < 100. Sla dit op in een lijst. TIP: gebruik 3 for loops, en het inzicht dat a < b < c.

def pythtriple(a,b,c):
    if(a**2+b**2==c**2):
        return True
    else:
        return False
    
pythtriplelijst = []
for a in range(1,98):   #a < b < c < 100 dus a is maximaal 98
    for b in range(a, 99):   
        for c in range(b, 100):
            if(pythtriple(a,b,c)):
                pythtriplelijst.append((a,b,c))



print(pythtriplelijst)
[(3, 4, 5), (5, 12, 13), (6, 8, 10), (7, 24, 25), (8, 15, 17), (9, 12, 15), (9, 40, 41), (10, 24, 26), (11, 60, 61), (12, 16, 20), (12, 35, 37), (13, 84, 85), (14, 48, 50), (15, 20, 25), (15, 36, 39), (16, 30, 34), (16, 63, 65), (18, 24, 30), (18, 80, 82), (20, 21, 29), (20, 48, 52), (21, 28, 35), (21, 72, 75), (24, 32, 40), (24, 45, 51), (24, 70, 74), (25, 60, 65), (27, 36, 45), (28, 45, 53), (30, 40, 50), (30, 72, 78), (32, 60, 68), (33, 44, 55), (33, 56, 65), (35, 84, 91), (36, 48, 60), (36, 77, 85), (39, 52, 65), (39, 80, 89), (40, 42, 58), (40, 75, 85), (42, 56, 70), (45, 60, 75), (48, 55, 73), (48, 64, 80), (51, 68, 85), (54, 72, 90), (57, 76, 95), (60, 63, 87), (65, 72, 97)]