Primzahlprüfung wirkt

OP #7020038
Lesenswert?

Ich habe versucht, ein Programm zu schreiben, das eine imputierte Zahl 
akzeptiert und überprüft, ob es sich um eine Primzahl handelt.

Der Code, den ich bisher gemacht habe, funktioniert perfekt, wenn die 
Zahl tatsächlich eine Primzahl ist. Wenn die Zahl keine Primzahl ist, 
verhält sie sich seltsam. Ich frage mich, ob jemand mir sagen kann, was 
das Problem mit dem Code ist.
1
a=2
2
Zahl=13
3
while num > a :
4
  if num%a==0 & a!=num:
5
    print('not prime')
6
    a=a+1
7
  anders:
8
    print('prime')
9
    a=(Zahl)+1

Das Ergebnis, wenn 24 imputiert wird, ist:
1
nicht prim
2
nicht prim
3
nicht prim
4
prim

Wie würde ich den Fehler beheben, bei dem bei jeder ungeraden Primzahl 
und nicht bei jeder geraden Primzahl gemeldet wird?

Referenz: 
[here](https://www.scaler.com/topics/prime-number-program-in-python/)
(Firma: Funkenflug Industries) #7020059
Lesenswert?

Nein, dann müsste es impotent heißen.

Aber wegen dem Thema:

So kleine Zahlen kann man prima testen, indem man probiert, sie durch 
alle kleineren Zahlen zu teilen, bis das Ergebnis kleiner als 3 wird. 
Unterhalb von 3 bleiben nur die ganzzahligen Teiler 2 und 1 übrig, 2 
geht nicht weil es keine geraden Primzahlen gibt und 1 macht keinen Sinn 
weil jede Zahl durch 1 teilbar ist.
(Firma: Funkenflug Industries) #7020106
Lesenswert?

Haarspalterei.

@TE: Kannst Du mit PHP was anfangen? Hier mal ein ganz alter Fetzen Code 
von mir, so alt, daß ich dafür nicht mal eine Garantie übernehme, daß 
der fehlerfrei und zuverlässig funktioniert. Primzahltests sind lustig, 
jeder programmiert sowas und keiner brauchts hinterher auch.
1
<?php
2

3
$zahl=9999937; //Zahl zur Prüfung
4

5
if (($zahl%2==0) and ($zahl!=2)) {
6
 echo'Es gibt keine geraden Primzahlen >2.';die;
7
}
8

9
$min_divisor=floor($zahl/3)+1;
10
for ($n=3;$n<=$min_divisor;$n+=2) {
11
 if ($zahl%$n==0) {break;}
12
}
13

14
if ($n>$min_divisor) {
15
 echo $zahl.' ist eine Primzahl.';die;
16
} else {
17
 echo $zahl.' ist durch '.$n.' teilbar.';
18
}
19

20
?>
#7020195
Lesenswert?

Sebastian R. schrieb:
> ich verstehe RegEx nicht

der Trick ist hier:
(1x$_) !~ /^(11+)\1+$/

$_ ist die gerade geprüfte Zahl.
"1"x$_ erzeugt einen String "1111...." in der Länge der geprüften Zahl.
/^(11+)\1+$/
Sucht mit "(11+)" nach einem Teil-String "11...", mit dem sich, wenn er 
beliebig oft wiederholt wird ("\1+") der gesamten String (sichergestellt 
durch ^ und $) ausfüllen lässt.

Insofern selber Ansatz zur Berechnung, nur dass die Suche nach einem 
Ganzzahligen Teiler >= 2 eben der Regex-Engine überlassen wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren