Ich versuche, eine Funktion zu erstellen, um zu testen, ob eine gegebene Zahl eine Primzahl ist. Ich habe folgendes versucht:
%Vor%Das funktioniert nicht, obwohl ich nicht verstehen kann warum. Ich überprüfe, ob die gegebene Zahl durch irgendeine der ganzen Zahlen bis zu dieser Zahl ohne Reste geteilt werden kann. Wenn es kippen kann, dann ist die Zahl prim.
Eine andere Lösung, die ich gefunden habe, war:
%Vor% Das funktioniert. Obwohl ich nicht verstehen kann, wofür sum(pn/1:pn == pn%/%1:pn) == 2
tatsächlich testet.
Eine Zahl a
ist durch eine Zahl b
teilbar, wenn das Ergebnis der Division a / b
gleich dem Ergebnis der Ganzzahl division a %/% b
ist. Jede Ganzzahl pn
kann durch mindestens zwei Zahlen geteilt werden: 1
und pn
. Primzahlen sind solche, die nur durch diese zwei geteilt werden können. Den Code ausbrechen:
pn / 1:pn
sind die Ergebnisse der Divisionen nach 1
, 2
, ..., pn
pn %/% 1:pn
sind die Ergebnisse der ganzzahligen Unterteilungen nach 1
, 2
, ..., pn
sum(pn / 1:pn == pn %/% 1:pn)
gibt an, wie viele von diesen gleich sind, d. h. die Anzahl von Ganzzahldivisoren von pn
. Wenn diese Zahl 2
ist, haben Sie eine Primzahl. Was mit deinem Code nicht stimmt: if
muss testen, ob etwas TRUE
oder FALSE
ist, aber du hast einen ganzen Vektor übergeben. Auch deine Logik war falsch. Es hätte sein sollen:
Und wenn Sie sich dazu entschlossen haben, eine logische Antwort zu geben, können Sie Ihren Code viel kürzer machen:
%Vor%(enthält @ Carls Kommentar, dass nicht alle Zahlen überprüft werden sollen.)
Sie können auch die Funktion isprime()
im Paket matlab verwenden . Es funktioniert auch mit Vektorargumenten:
Hier ist eine weitere Methode, die Primzahl mit einem einfachen Konzept zu finden
%Vor%Hier ist der kompakteste Code, den ich denke:
%Vor%Wenn Sie überprüfen müssen, ob jedes Element eines Zahlenvektors eine Primzahl ist, können Sie Folgendes tun:
%Vor% Jetzt arbeitet is_prime2()
mit Vektoren.