Python Primzahlen erraten umschreiben?
Hey ich hab ein Programm zu Primzahlen erraten entworfen. Allerdings gefällt es mir noch nicht so gut. Könnte jemand das ganze etwas eleganter programmieren bzw umschreiben?
def teiler(N):
liste=[]
i = 2
rest = 0
while i < N:
rest = N%i
if rest == 0:
liste.append(i)
i=i+1
else:
i=i+1
return(liste)
print("PRIMZAHLENDETEKTOR")
print()
N=2
while N != 0:
N=int(input("Bitte eine Zahl eingeben (Abbruch mit 0): "))
ergebnis=teiler(N)
if len(ergebnis)==0:
print(N," ist eine Primzahl!")
else:
print(N," ist keine Primzahl!")
3 Antworten
Es gibt übrigens eine Quelltext-Formatierungsfunktion - mit diesem Zeichen: </>
def teiler(N):
liste=[]
i = 2
rest = 0
while i < N:
rest = N%i
if rest == 0:
liste.append(i)
i=i+1
else:
i=i+1
return(liste)
So, nun zum Inhalt:
- Warum eine Liste? Dir reicht doch im Prinzip ein Rückgabewert - Wahr oder falsch
- Du brauchst nur bei Wurzel(N) prüfen, wenn die Zahl keine Primzahl ist, muss sie mindestens einen kleineren Teiler haben.
- mit early-return wird es effizienter
- Zuweisung rest=0 brauchst du nicht machen, wenn der Wert sowieso überschrieben wird.
- Wenn eine Operation im if und im else-Zweig ausgeführt wird, kannst du sie auch raus ziehen, sodass sie immer ausgeführt wird
- ich gebe keine Garantie auf korrekte Syntax:
def teiler(N):
i = 2
while i < Math.sqrt(N):
rest = N%i
if rest == 0:
return false
i=i+1
return true
Diese lösen Ihr Problem?
import math
primes = []
def isPrime(number):
if number<=1:
return False
if number==2:
return True
if number%2==0:
return False
for i in range(3,int(math.sqrt(number))+1):
if number%i==0:
return False
return True
for i in range (1, 9999999):
if isPrime(i) == True:
primes.append(i)
print(primes)
--
num = int(input("Geben Sie eine Zahl ein: "))
if num > 1:
for i in range(2,num):
if (num % i) == 0:
print(num, "ist keine Primzahl")
print(i,"x",num//i,"ist",num)
break
else:
print(num,"ist eine Primzahl")
else:
print(num,"ist keine Primzahl")
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
boolean is_primzahl=true;
int zahl,grenze,i=1,ergebnis=2;
System.out.println("Bitte geben sie die Zahl ein die sie überprüfen möchten");
zahl=s.nextInt();
while(ergebnis>i)
{
ergebnis=zahl/i;
i++;
}
i=2;
grenze=ergebnis;
for(i=3;i<=grenze;i=i+2)
{
if(zahl%i==0)
{
is_primzahl=false;
break;
}
}
if(is_primzahl==true)
{
System.out.println("Ihre Zahl ist eine Primzahl");
}
else {
ergebnis=zahl/i;
System.out.println("Ihre Zahl ist keine Primzahl, denn "+zahl+" / "+i+" ergibt "+ergebnis);
}
}
Ist zwar Java aber vielleicht hilft es dir ja