Seite 1 von 1
Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?
Verfasst: Sonntag 20. November 2016, 21:20
von cronotyper
Hi Leute, ich bin ein gefürchteter Newbe seit 1 Woche und Arbeite noch mit tutorials und Verständnis.
Mein Wissen ist nicht besonders umfangreich oder gefestigt.
Mein Taschenrechner soll zwei Integer detektieren, ob diese
prim sind.
Also:
Code: Alles auswählen
num1 = int(input("Gib die erste Zahl ein: "))
num2 = int(input("Gib die zweite Zahl (ist auch Potenz etc.) ein: "))
...dazu soll der Code so platzsparend wie möglich beide Zahlen ausgeben, ohne den Schnipsel zweimal schreiben zu müssen.
Code: Alles auswählen
if num1 >1:
for x in range(2, num1):
if (num1 % x) == 0:
print(num1, "ist keine Primzahl")
break
else:
print (num1, "ist eine Primzahl")
else:
print(num1,"ist keine Primzahl")
Wie gehts am besten? :K
Re: Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?
Verfasst: Sonntag 20. November 2016, 21:36
von BlackJack
@cronotyper: Code-Wiederholungen vermeidet man durch Funktionen und/oder Schleifen.
Re: Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?
Verfasst: Sonntag 20. November 2016, 21:46
von jerch
@cronotyper:
Den Teilertest kannst Du noch optimieren. Überleg einfach mal, ob Du wirklich bis zur Zahl selbst testen musst oder früher schon aufhören kannst.
Re: Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?
Verfasst: Sonntag 20. November 2016, 21:49
von pixewakb
https://www.scipy.org/
http://www.sympy.org/en/index.html
Code: Alles auswählen
from sympy.ntheory import isprime
while True:
try:
zahl = int(input("Geben Sie eine Ganzzahl ein: "))
if zahl <= 0 :
raise ValueError
except ValueError:
print("Das war keine Ganzzahl > 0!\n")
if isprime(zahl):
print("{} ist eine Primzahl".format(zahl))
else:
print("{} ist keine Primzahl".format(zahl))
Konkret nutze ich:
http://docs.sympy.org/latest/modules/nt ... st.isprime
Wenn es um so etwas geht, ist diese Bibliothek m. E. absolut großartig. Ich habe auch mal so angefangen, ich merke allerdings an, dass Du mal nach Sieben und Primzahlen suchen solltest.
Re: Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?
Verfasst: Sonntag 20. November 2016, 21:59
von jerch
@pixewakb:
Deine Empfehlung halte ich für unglücklich, da Dein `isprime` Verfahren benutzt, die pseudoprim enden können, während der Teilertest des OPs EXAKT ist. Die peudoprim-Verfahren sind super, wenn man sich in die Domäne eingearbeitet hat und deren Vorzüge/Fallstricke einzuschätzen weiß.
Re: Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?
Verfasst: Sonntag 20. November 2016, 22:26
von pixewakb
Sorry, als Nicht-Mathematiker war mir das nicht bekannt.

Ich versuchte darauf aufmerksam zu machen, dass man sich Programmieraufwand reduzieren kann, wenn man auf fertige Lösungen zurückgreifen kann und nicht jedes Rad selbst neu erfindet. Dass die Implementierung in der Bibliothek problematisch sein könnte, hatte ich nicht erwartet.
Re: Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?
Verfasst: Sonntag 20. November 2016, 23:14
von BlackJack
Ungetestet:
Code: Alles auswählen
from itertools import chain
from math import sqrt
def is_prime(number):
candidates = chain([2], range(3, int(sqrt(number)), 2))
return all(number % i != 0 for i in candidates)
Re: Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?
Verfasst: Montag 21. November 2016, 04:25
von cronotyper
Uhi*, okay Schleife ist ja drin, FOR.
Habe bisher nur einfach Operationen benutzt wie math.gcd und die Grundrechenarten.
Dann ganz einfach Ausgaben gegeneriert nach dem Beispiel:
Code: Alles auswählen
num1 = int(input("Gib die erste Zahl ein: "))
num2 = int(input("Gib die zweite Zahl (ist auch Potenz etc.) ein: "))
summe1=num1+num2 # Addition
summe2=num1-num2 # Subtraktion
print(num1, " + ", num2, "=", summe1, "\n", "___", "\n" )
print(num1, " - ", num2, "=", summe2, "\n", "___", "\n" )
Dazu div, mult, modulo, gemeinsamer teiler, gemeinsames vielfaches, wurzel und jetz bei PRIM hänge ich fest.
Muss wohl noch bisschen mehr lernen bzw. verstehen wie prim exakt berechnet wird und wo die schleife reinkommt (for, while)
Danke mal für die Ideen wenn ich ich geschafft habe meld ich mich nochmal.
