Die letzten 6 Beiträge |
Kleiber |
Danke an alle für die Hinweise. Euler hat meine Lösungsidee dann nochmal verbessert, sieht so besser aus
|
eulerscheZahl |
Kleiber schreibst zunächst für jede Zahl im Bereich 1-100 entweder True oder False in die Liste, je nachdem ob sie prim ist oder nicht.
Wenn die Zahl 0 oder 1 ist, ist sie offensichtlich nicht Prim, also schreibe False in die Liste
Die Zahlen 2, 3 und 5 sind Primzahlen, in dem Fall schreibe True
Trifft das nicht zu, ist die Zahl aber Vielfaches von 2, 3 oder 5, ist sie nicht prim, also schreibe False in die Liste
Hat nicht von alledem zugetroffen: gehe von 5 aus in 2er Schritten bis bis n/2 (aufgerundet) und führe eine Probedivision durch
Hier der Code von Kleiber nochmal leicht modifiziert:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
|
isPrime=[]
for x in range(1,101):
if x==0 or x==1:
isPrime.append(False)
elif x==2 or x==3 or x==5:
isPrime.append(True)
elif x%2==0 or x%3==0 or x%5==0:
isPrime.append(False)
else:
noDivisors = True
for d in range(5,x//2+1,2):
if x%d==0:
noDivisors = False
break
isPrime.append(noDivisors)
print(isPrime)
print(len(isPrime)) |
|
|
ed209 |
Hi Kleiber,
Ich verstehe Deine Loesung ueberhaupt nicht. Kannst Du uns vielleicht erklaeren wie sie funktionieren soll und wir koennen dann schauen ob Du eventuell irgendwo einen Denkfehler oder einen Programmierfehler hast.
Gruss,
ED |
eulerscheZahl |
So würde ich es machen:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
|
def isPrime(n):
if (n < 2): return False
i = 2
while (i*i <= n):
if n%i == 0: return False
i += 1
return True
start = int(raw_input("Startwert: "))
end = int(raw_input("Endwert: "))
for i in range(start, end+1):
print isPrime(i) |
|
Beachte, dass du mit den Teilern nur bis sqrt(n) gehen musst, nicht bis n/2 |
Kleiber |
So, habe EINE Lösung, aber keine elegante
Geht das auch anders?
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
|
isPrime=[]
for x in range(1,101):
if x==0 or x==1:
isPrime.append(False)
continue
if x==2 or x==3 or x==5:
isPrime.append(True)
continue
if x%2==0 or x%3==0 or x%5==0:
isPrime.append(False)
continue
l=0
for d in range(5,int(x**0.5)+1,2):
if x%d==0:
isPrime.append(False)
l=1
break
continue
if l==0:
isPrime.append(True)
print(isPrime)
print(len(isPrime))
|
|
|
Kleiber |
Python Code
Abend Leute,
ich habe hier eine Aufgabe, an der ich jetzt seit 3h scheitere
Dabei ist es so einfach...
Ich soll einen Code bauen, in den man einen bestimmten Bereich eingibt, z.B. 1-100, und dann werden dort alle Primzahlen gesucht. Er beginnt also mit 1 und schreibt dann True für Primzahl bzw. False für keine Primzahl. Ist keine tolle Aufgabe, aber eben die Aufgabe...
Leider scheitert mein Code. Hier mein Code:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
isPrime=[]
for x in range(1,100):
if x==0 or x==1:
isPrime.append(x+100)
continue
if x==2 or x==3 or x==5:
isPrime.append(x+200)
continue
if x%2==0 or x%3==0 or x%5==0:
isPrime.append(x+300)
continue
for d in range(5,(x//2)+1,1):
if x%d==0:
isPrime.append(x+900)
break
isPrime.append(x+500)
print(isPrime)
print(len(isPrime)) |
|
Die Trues und Falses fehlen, ich habe zum Debuggen die Zahlen in Klammern. Ihr seht, dass der Code knapp scheitert, wenn ihr euch 49 anschaut. Diese Zahl taucht 2x mal auf, obwohl der Code zuerst eigentlich korrekt erkennt, dass es KEINE Prim ist
Kann jemand den Bug finden? Python3... |
|
|