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!
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)
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.
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,...
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).
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.
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")
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)
du kanske inte har importerat math
import math
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
Skulle det vara så?
Varför börjar med 2,3,4,5,6,7,8.. Skulle det inte dividera med 2?
nästan, notera 49, det är 7*7
Vad ska jag göra för att inte skriva ut 49?
ett ögonblick, jag skall kolla, jag tror jag har ett tankefel
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)
Jag är så tacksam för jättebra förklaring och lösning :) Du är grymt!!
TACK TACK TACK!!!