Generieren Sie sexy Primzahlen

8

Sexy Primes sind Zahlenpaare (n, m)wie nund mbeide sind Primzahlen und m = n + 6.

Sie müssen eine Funktion erstellen, die eine Ganzzahl akzeptiert, nach sexy Primzahlen von 0 bis zu dieser Ganzzahl suchen und ein Array von Arrays zurückgeben.

Zum Beispiel listSexy(30)muss zurückkehren [[5,11], [7,13], [11,17], [13,19], [17,23], [23,29]]oder ein gleichwertiges.

Dies ist also gewinnt das Programm mit dem kürzesten Bytecount!

Rohit
quelle
Können Sie erklären, wie das gewünschte Ausgabeformat aussieht?
Howard
11
Bah, ich hasse es, wenn sich die Herausforderung ändert, nachdem Antworten eingereicht wurden.
Griffin
2
Gibt es einen bestimmten Grund, von 0 zu prüfen? Warum sollte ich nicht von (5,11) aus überprüfen? Eine kurze Definition von sexy Primzahlen sollte hier gegeben werden, während ein Link zu Wikipedia zur weiteren Lektüre willkommen ist.
Benutzer unbekannt
1
Auf Portugiesisch bedeutet Sexy Primes dasselbe wie Sexy Cousins!
Sergiol

Antworten:

11

MATLAB 32

i=1:n;i(isprime(i)&isprime(i+6))

n ist deine Nummer

Greif
quelle
+1 Das ist das richtige Werkzeug für den Job : isprime. Nicht dass die Operation es beabsichtigt hätte.
Johannes Kuhn
5

J, 34 33 31 32 39 37 Zeichen

s=.[:(,.-&6)[:I.1([:*/p:)"1 i.,.6-~i.

Verlor einen Charakter, der beide Primzahlen unter dem Limit hielt ... und weitere 7, die eine Funktion deklarierten.

Verwendungszweck:

   s 100
11  5
13  7
17 11
19 13
23 17
29 23
37 31
43 37
47 41
53 47
59 53
67 61
73 67
79 73
89 83

Bearbeiten

Es scheint, als würden viele der neuen Antworten keine Funktionen erstellen, Eingaben vornehmen oder beide Zahlen im Paar so einschränken, dass sie darunter liegen. nWenn ich diese Einschränkungen ebenfalls ignoriere, kann ich auf 28 Zeichen reduzieren :

(,.6&+)I.*/"1[1 p:(i.,.6+i.)
Gareth
quelle
5

Mathematica , 35

{#,#+6}&~Array~#~Cases~{__?PrimeQ}&
Mr.Wizard
quelle
3

GolfScript, 32 Zeichen

~),2>{:P{(.P\%}do(!},:L{6+L?)},p

Da das Ausgabeformat nicht angegeben wurde, gibt der obige Code die untere Primzahl jedes Paares aus. Somit ist eine Zahl xenthalten, wenn xund x+6beide Primzahlen sind und beide unten liegen n. Die Eingabe erfolgt als einzelne Nummer auf STDIN.

> 150
[5 7 11 13 17 23 31 37 41 47 53 61 67 73 83 97 101 103 107 131]
Howard
quelle
Ich denke, Sie sollten beide Primzahlen drucken. Es ist ein Teil der Aufgabe.
Ugoren
1
@ugoren Die Aufgabe wurde geändert, nachdem ich meine Version eingereicht habe. Ich werde versuchen, das bald zu meiner Version hinzuzufügen.
Howard
Ja, Ihre Antwort entspricht der ursprünglichen Aufgabe.
Ugoren
2

K3 / Kona , 45

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/x!'2_!x}'!x}

.

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/x!'2_!x}'!x}100
(11 5
 13 7
 17 11
 19 13
 23 17
 29 23
 37 31
 43 37
 47 41
 53 47
 59 53
 67 61
 73 67
 79 73
 89 83)

Und die gleiche Lösung in der aktuellen Inkarnation von K, die mit der K3-Lösung identisch ist, mit der Ausnahme, dass es keinen eingebauten Mod-Operator gibt, der ungefähr 59 Zeichen für 59 hinzufügt

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/{x-y*x div y}[x;2_!x]}'!x}
tmartin
quelle
2

Python ( 93 90 99 95)

Yay für schnelle und schmutzige isprimeFunktionen!

a=lambda x:all(x%i for i in range(2,x));b=2
while b<input():
 b+=1
 if a(b)&a(b+6):print b,b+6
beary605
quelle
1stattdessen Truewerden Sie 3 Zeichen speichern ...
Wooble
Warum vermisse ich das immer wieder? Fest.
Beary605
Sie erhalten keinen Grenzwertparameter. Außerdem wird []in all()nicht benötigt (zumindest in Python 2.7).
Ugoren
Wow wirklich? Cool! Ich werde den Parameter implementieren.
Beary605
Ich weiß nicht, warum Sie 1 von x subtrahieren, aber Sie können das für 2 Zeichen entfernen. Dann können Sie die while-Schleife durch eine for-Schleife von 2 bis input () + 1 für weitere 2 Zeichen ersetzen.
JPvdMerwe
1

Oktave 39

Meine MATLAB-Antwort wurde geändert, um den neuen (nervigen) Regeln zu entsprechen. nist dein Wert.

p=@isprime;i=1:n;[j=i(p(i)&p(i+6));j+6]

Kann hier getestet werden

Greif
quelle
1

C 102 99 95 Zeichen

Das Zurückgeben eines Arrays in C sollten Sie vermeiden. Die Funktion serhält also das Limit nund einen Zeiger auf ein Array von Ganzzahlen und füllt es mit den Daten. Jedes Paar sexy Primzahlen befindet sich an zwei Positionen im Array. Also o[0]=5, o[1]=11, o[2]=7, o[3]=13. Die Funktion geht davon aus, dass das Array groß genug ist.

x=7,l;
p(){
    return++l>=x/2||x*(x-6)%l&&p();
}
s(int n,int*o){
    for(;l=++x<=n;)p()?*o++=x-6,*o++=x:0;
}
ugoren
quelle
1

R, 83 Zeichen

f=function(n){library(gmp);p=isprime;for(i in 1:n)if(p(i)&p(i+6)){print(c(i,i+6))}}

Verwendungszweck:

f(150)
Paolo
quelle
1

Ruby 75 74

Die neue Version verwendet die Haupttestmethode von Artem Ice :

z=->x{(9..x).map{|i|[i-6,i]}.select{|a|a.all?{|r|(2...r).all?{|m|r%m>0}}}}

Online-Test: http://ideone.com/yaOdn

Cristian Lupascu
quelle
1

Ruby, 99 88 86 84 82 78

f=->x{(9..x).map{|n|[n-6,n]if[n,n-6].all?{|t|(2...t).all?{|m|t%m>0}}}.compact}

Beispielausgabe:

[[5, 11], [7, 13], [11, 17], [13, 19], [17, 23], [23, 29], [31, 37], [37, 43], [41, 47], [47, 53], [53, 59], [61, 67], [67, 73], [73, 79], [83, 89]]

defhlt
quelle
1

Python, 137 132 126 122 116

Mir ist klar, dass dies ein kleiner Fehler ist, aber es ist meine erste Antwort. Warum also nicht?

f=lambda x:not[y for y in range(2,x)if x%y==0]
i=30
print [(x,y)for x in range(i)for y in range(i)if f(x)&f(y)&x-6==y]

Verwenden von Listenverständnissen sowie der Tatsache, dass [] = False

f(x)gibt tatsächlich alle Faktoren von zurück x, und Sie können dann die Primzahl daraus herausfinden.

ACarter
quelle
Sie können sich f(x)in verwandeln f=lambda x:not[y for y in range(2,x)if x%y==0], um einige Zeichen zu speichern. Sie können auch das ifs am Ende Ihres Listenverständnisses mit reduzieren f(x)&f(y)&(x-6==y).
Beary605
@ beary605 Ich weiß nicht wirklich viel über Lamdas (naja, ich weiß nichts), also werde ich mir das ansehen, aber ja, und nicht wenn.
ACarter
Ein Lambda ist eine anonyme Funktion, die einen Wert zurückgibt. a=lambda x,y,z:(value here)ist das gleiche wie def a(x,y,z):return (value here).
Beary605
Genial, ich scheine den Dreh raus zu bekommen. Aktualisiert. Vielen Dank!
ACarter
1

JavaScript (1 Tweet = 140 Zeichen)

Hier ist es:

function t(n,i){for(i=2;i<n;i++)if(!(n%i))return!1;return!0}function s(n,p){for(p=[],i=2;i<n-6;i++)if(t(i)&&t(i+6))p.push([i,i+6]);return p}

Versuchen Sie es s(30).

Inkbug
quelle
1

J, 25 Zeichen

(#~*/"1@p:~&1)(,+&6)"0 i.

i.n erzeugt einen Bereich von [0, n)

(,+&6)"0nimmt jede ganze Zahl nin der Liste und bildet ein Paarn, n+6

(#~ condition)ist im Grunde genommen eine filter, und die Bedingung in diesem Fall */"1@p:~&1prüft nur, ob ein Paar nur aus Primzahlen besteht.

rationalis
quelle
1

C # (279 Zeichen)

Im Grunde ist es Saumils Lösung mit ein paar Verbesserungen. Ich habe nicht genug Ruf, um Kommentare abzugeben, also ...

using System;namespace X{public class P{static int l=100;static void Main(){F(0);}static bool I(int n){bool b=1>0;if(n==1){b=1<0;}for(int i=2;i<n;++i){if(n%i==0){b=1<0;break;}}return b;}static void F(int p){if((p+6)<=l){if(I(p+6)&&I(p)){Console.WriteLine(p+6+","+p);}F(p+1);}}}}

Ausgabe:

11,5
13,7
17,11
19,13
23,17
29,23
37,31
43,37
47,41
53,47
59,53
67,61
73,67
79,73
89,83
Herr Scapegrace
quelle
0

Perl: 73 char

sub p{(1x$_[0])!~/^(11+?)\1+$/}map{$x=$_+6;p($_)&&p($x)&&say"$_,$x"}2..<>

Verwendungszweck:

echo 30 | perl -E 'sub p{(1x$_[0])!~/^(11+?)\1+$/}map{$x=$_+6;p($_)&&p($x)&&say"$_,$x"}2..<>'

Ausgabe:

5,11
7,13
11,17
13,19
17,23
23,29
Toto
quelle
0

C # 295

using System;using System.Linq;namespace K{class C{public static void Main(string[]a){Func<int,bool>p=i=>Enumerable.Range(2,i-3).All(x=>i%x>0);Console.WriteLine("["+String.Join(",",Enumerable.Range(0,int.Parse(a[0])).Where(i=>i>9&&p(i)&&p(i-6)).Select(i=>"["+(i-6)+","+i+"]").ToArray())+"]");}}}

Online-Test: http://ideone.com/4PwTW (in diesem Test habe ich int.Parse(a[0])den tatsächlichen int-Wert ersetzt, da ich keine Befehlszeilenargumente für Programme liefern kann, die auf ideone.com ausgeführt werden)

Cristian Lupascu
quelle
0

Mathematica - 69 48 Zeichen

Angenommen, m wurde ein Wert zugewiesen

p=PrimeQ;Cases[Range@m,n_/;p@n&&p[n+6]:>{n,n+6}]
DavidC
quelle
0

Scala (82)

def p(n:Int)=9 to n map(x=>List(x-6,x))filter(_.forall(l=>2 to l-1 forall(l%_>0)))

Beispielausgabe: Vector(List(5, 11), List(7, 13), List(11, 17), List(13, 19), List(17, 23), List(23, 29), List(31, 37), List(37, 43), List(41, 47), List(47, 53), List(53, 59), List(61, 67), List(67, 73), List(73, 79), List(83, 89))

defhlt
quelle
0

Faktor 140

Diese Sprache macht Spaß und ist interessant. Mein erstes Drehbuch.

:: i ( n -- ? )
n 1 - 2 [a,b] [ n swap mod 0 > ] all? ;
:: s ( n -- r r )
11 n [a,b] [ i ] filter [ 6 - ] map [ i ] filter dup [ 6 + ] map ;

Verwendungszweck:

( scratchpad ) 100 f

--- Data stack:
V{ 5 7 11 13 17 23 31 37 41 47 53 61 67 73 83 }
V{ 11 13 17 19 23 29 37 43 47 53 59 67 73 79 89 }
defhlt
quelle
0

PARI / GP (62 Zeichen)

f(a)=w=[];forprime(x=0,a,isprime(x+6)&w=concat(w,[[x,x+6]]));w

Beispiel:

 (00:01) gp > f(a)=w=[];forprime(x=0,a,isprime(x+6)&w=concat(w,[[x,x+6]]));w
 (00:01) gp > f(30)
 %1 = [[5, 11], [7, 13], [11, 17], [13, 19], [17, 23], [23, 29]]
Yury
quelle
0

C # ( 321 303 290 Zeichen)

using System;namespace X{public class P{ static int l=100;static void Main(){F(0);}static bool I(int n){bool b=true;if(n==1){b=false;}for(int i=2;i<n;++i){if(n%i==0){b=false;break;}}return b;}static void F(int p){if((p+6)<=l){int m=p+6;if(I(m)&&I(p)){Console.WriteLine(m+","+p);}F(p+1);}}}}

Ausgabe:
11,5
13,7
17,11
19,13
23,17
29,23
37,31
43,37
47,41
53,47
59,53
67,61
73,67
79,73
89,83

Saumil
quelle
Willkommen bei CodeGolf! Sie können einige Zeichen speichern, wenn Sie der Klasse und den Methoden Ein-Buchstaben-Namen geben (z. B. class Panstelle von class Program).
Cristian Lupascu
0

Haskell (65 Zeichen)

p n=[(x,x+6)|x<-[3..n-6],all(\k->all((>0).mod k)[2..k-1])[x,x+6]]

Die Ausgabe:

Prelude> p 100
[(5,11),(7,13),(11,17),(13,19),(17,23),(23,29),(31,37),(37,43),(41,47),(47,53),(
53,59),(61,67),(67,73),(73,79),(83,89)]

Über die MATLAB-Antwort hier:

(Ich habe meinen ganzen Repräsentanten für ein Kopfgeld ausgegeben, kann also noch keinen Kommentar abgeben) . Google sagt: "Die Isprime-Funktion des Matlab ... basiert auf dem probabilistischen Miller-Rabin". Es scheint also, dass der MATLAB-Eintrag disqualifiziert werden sollte.

Will Ness
quelle
0

R 85 81 Zeichen

f=function(n){m=2:n;a=m[rowSums(!outer(m,m,`%%`))<2];cbind(b<-a[(a+6)%in%a],b+6)}

Beispiellauf:

f(50)
      [,1] [,2]
 [1,]    5   11
 [2,]    7   13
 [3,]   11   17
 [4,]   13   19
 [5,]   17   23
 [6,]   23   29
 [7,]   31   37
 [8,]   37   43
 [9,]   41   47
Planapus
quelle
0

PHP, 106 Bytes

function p($n){for($i=$n;--$i&&$n%$i;);return$i-1;}for(;++$i<$argv[1]-5;)p($i)|p($k=$i+6)?:print"$i,$k\n";

Das Programm druckt Paare n,n+6, die durch Zeilenumbrüche begrenzt sind. Laufen Sie mit -r.

Ich habe meine is_prime-Funktion geändert (und ein Byte gespeichert), sodass sie 0für Primzahlen zum Golfen auf dem Elvis zurückkehrt.

Titus
quelle
0

Gelee , 13 Bytes (nicht konkurrierend)

‘Ḷµż+6$ÆPẠ$Ðf

Probieren Sie es online aus!

Erweiterte Erklärung:

‘Ḷµż+6$ÆPẠ$Ðf Main link. Arguments: z.
‘Ḷ            Range: [0..z].
  µ           Start a new monadic chain.
    +6        Add 6 to each element of x. (implicit x=⁸).
      $       Last two links (+6) as a monad.
   ż          Interleave x and y.
       ÆP     Do a primality check every element of every element of z.
         Ạ    Do an "all" check on every element of z.
          $   Last two links as a monad.
           Ðf Keep the elements of z that return a truthy value given this monad.
Erik der Outgolfer
quelle
-3

Obj-C 64 Zeichen

if([self isPrime:i]&&[self isPrime:i+6])NSLog(@"%d %d\n",i,i+6);

isPrime wird separat implementiert

akshay1188
quelle
6
Wenn Sie eine Funktion deklarieren, isPrimedie nicht Teil der Sprache oder Standardbibliothek ist, müssen Sie die Zeichenanzahl für diese Funktion als Teil Ihrer Punktzahl angeben.
Gareth