Py 3.5 - Primzahldetektor für zweit Integer, so kurz wie möglich?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
cronotyper
User
Beiträge: 13
Registriert: Samstag 19. November 2016, 10:33

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
print("print was typing, before this print was printed")
BlackJack

@cronotyper: Code-Wiederholungen vermeidet man durch Funktionen und/oder Schleifen.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@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.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

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.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@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ß.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Sorry, als Nicht-Mathematiker war mir das nicht bekannt. :oops: 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.
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)
Benutzeravatar
cronotyper
User
Beiträge: 13
Registriert: Samstag 19. November 2016, 10:33

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.
:D
print("print was typing, before this print was printed")
Antworten