Primzahlfunktion in R

7

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.

    
user2952367 04.11.2013, 12:06
quelle

9 Antworten

17

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:

  1. pn / 1:pn sind die Ergebnisse der Divisionen nach 1 , 2 , ..., pn
  2. pn %/% 1:pn sind die Ergebnisse der ganzzahligen Unterteilungen nach 1 , 2 , ..., pn
  3. 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:

%Vor%

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.)

    
flodel 04.11.2013, 12:25
quelle
7

Ich habe gerade das is.prime Codebeispiel ausprobiert. Aber mit dieser 3 ist nicht prim; o)

Die verbesserte Version verwendet Decke anstelle der Bodenoperation.

%Vor%

Am besten!

    
Seily 24.04.2014 10:25
quelle
4

Sie können auch die Funktion isprime() im Paket matlab verwenden . Es funktioniert auch mit Vektorargumenten:

%Vor%     
user2030503 28.05.2014 08:25
quelle
3

Ein regulärer Ausdruck, um Primzahlen zu finden

%Vor%

Ссылка

Oder wenn Sie alle Ganzzahlen von 1 bis x verwenden, sollte die Zahl, die keinen Rest enthält, 2: 1 und x

sein %Vor%

Ich wusste, dass die Regex am langsamsten wäre, aber es ist immer noch mein Favorit

%Vor%     
rawr 15.04.2017 15:46
quelle
1

Ich werde Ihnen zwei einfache Funktionen zur Verfügung stellen. Der zweite zeigt die n -te Primzahl. BEARBEITEN * (Tippfehler)

%Vor%     
MathGainz 14.05.2017 00:17
quelle
1

Hier ist eine weitere Methode, die Primzahl mit einem einfachen Konzept zu finden

%Vor%     
Sugand Anand 06.12.2017 08:23
quelle
0

Dies ist die vektorisierte Version mit zusätzlicher Überprüfung der natürlichen Zahl:

%Vor%     
Yuri 15.03.2017 11:43
quelle
0
%Vor%     
neeraj Guntupalli 24.04.2017 07:10
quelle
0

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.

    
SavedByJESUS 26.06.2017 05:05
quelle

Tags und Links