18 svar
68 visningar
Mayaa1 är nöjd med hjälpen
Mayaa1 48
Postad: 4 apr 2023 18:27

Iterera från 2 till 100 för varje tal serien bestämmer och skriver ut om det är ett primtal.

Hej! Jag är en heltidsarbetande och heltidsstuderande mamma, barnen är sjuka hemma och jag kunde inte förstå hur jag skulle svara på den här frågan. Om det finns någon som kan hjälpa mig att lösa det skulle jag bli jätteglad.Frågan är viktig för mig eftersom sådana här frågor ska komma på provet.

 

Skriv ett program som itererar från 2 till 100 för varje tal serien bestämmer och skriver ut om det är ett primtal. Om ett tal n är ett primtal, kan det bestämmas genom att man dividerar detta med alla tal från 2 til sqrt(n). Om någon rest av divisionen blir 0, är n inget primtal. Resten av en division kan bestämmas med modulo-operatorn, %, i Python, Använd break för att avbryta en loop när resten blir 0.

Tack för hjälpen på förhand! 

anders_k Online 234
Postad: 4 apr 2023 18:40 Redigerad: 4 apr 2023 18:46

man börjar lite enkelt med att göra en loop som skriver ut alla talen 2 till 100

for i in range(2,100):
	print(i)

nu istället för att bara skriva ut med print(i) lägg till en ny if-sats som kollar i och avgör om det är udda tall annars behöver du inte gå vidare. om det är udda måste du kolla igenom med en ny loop om värdet är delbart med något av värdena 3 till sqrt(i)

Mayaa1 48
Postad: 4 apr 2023 18:55

Kan du förklara lite mer om hur jag ska skriva kod för att kolla om det är udda tal? skulle jag skriva break efter det eller gå vidare med else för att kolla om det är inte udda. 

anders_k Online 234
Postad: 4 apr 2023 18:58 Redigerad: 4 apr 2023 19:00
if i % 2 != 0:     
	print("udda")    

 

% är den s.k. modulo operatorn så den ger resten, dvs i % 2 == 0 för alla jämna tal.

i % 3 == 0 för alla tal som är delbara med 3, t.ex. 3,6,9,...

Mayaa1 48
Postad: 4 apr 2023 19:05

Okej. 

Men varför har du använt 3? I frågan står att om ett tal n är ett primtal, kan det bestämmas genom att man dividerar detta med alla tal från 2 till sqrt(n).

anders_k Online 234
Postad: 4 apr 2023 19:06 Redigerad: 4 apr 2023 19:14

man kan skippa 2 eftersom man redan vet att talet inte är jämnt. om man nu vill kolla om talet är jämnt eller inte först. om man inte vill det, då kan du börja med 2

kanske har jag uttryckt mig dumt, du kan använda % för att se om ett tal är delbart med ett annat, så du kan använda detta när du går igenom talen upp till sqrt för att se om i är ett primtal.

Mayaa1 48
Postad: 4 apr 2023 19:13

Jag förstår vad du menar och jag försöker verkligen men jag får inte till det. Vad ska jag göra efter

if i % 2 != 0: print("udda")

anders_k Online 234
Postad: 4 apr 2023 19:21 Redigerad: 4 apr 2023 19:26

Ok låt mig förklara det på ett annat sätt.

du vill gå igenom talen 2 till 100

for i in range(2, 100):

först vet du inte att i är ett primtal, så låt oss låtsas att det är ett primtal och bevisa motsatsen

primtal = 1  # primtal till bevisat motsatsen

nu kollar vi igenom alla tal från 2 till roten av i

for j in range(2,(int)(math.sqrt(i))):

eftersom primtal kan delas med sig själva skippar vi i

if (i != j):

nu kollar vi om i är delbart med j, och hur gör vi detta? med %

if (i % j == 0):
        primtal = 0

efter den inre loopen, kan vi nu kolla om primtal är 1, eller om det någon gång delades jämnt av j

if primtal:
    print(i)
Visa spoiler
for i in range(2, 100):
  primtal = 1
  for j in range(2,(int)(math.sqrt(i))):
    if (i != j):
      if (i % j == 0):
        primtal = 0
  if primtal:
    print(i)

 

 

Mayaa1 48
Postad: 4 apr 2023 19:26 Redigerad: 4 apr 2023 20:30

.

anders_k Online 234
Postad: 4 apr 2023 19:27

du kanske inte har importerat math

import math

Mayaa1 48
Postad: 4 apr 2023 19:29

Exakt!

Programmet skriver ut som:

2
3
4
5
6
7
8
9
11
13
15
17
19
23
25
29
31
35
37
41
43
47
49
53
59
61
67
71
73
79
83
89
97

Mayaa1 48
Postad: 4 apr 2023 19:30

Skulle det vara så?

Mayaa1 48
Postad: 4 apr 2023 19:32

Varför börjar med 2,3,4,5,6,7,8.. Skulle det inte dividera med 2?

anders_k Online 234
Postad: 4 apr 2023 19:32

nästan, notera 49, det är 7*7

Mayaa1 48
Postad: 4 apr 2023 19:33

Vad ska jag göra för att inte skriva ut 49?

anders_k Online 234
Postad: 4 apr 2023 19:35

ett ögonblick, jag skall kolla, jag tror jag har ett tankefel

anders_k Online 234
Postad: 4 apr 2023 19:48 Redigerad: 4 apr 2023 19:49

Ok förlåt jag glömde bort att du måste avrunda och sen lägga till 1 på det som kommer från math.sqrt( .. ) annars kommer det förstås bli fel.

for i in range(2, 100):
    primtal = 1
    r = (int)(math.sqrt(i))+1
    for j in range(2, r):
        if (i % j == 0):
            primtal = 0
            break
    if primtal:
        print(i)
Mayaa1 48
Postad: 4 apr 2023 19:50

Jag är så tacksam för jättebra förklaring och lösning :) Du är grymt!!

Mayaa1 48
Postad: 4 apr 2023 19:51

TACK TACK TACK!!!

Svara Avbryt
Close