セクシーな素数を生成する


8

セクシーな素数(n, m)nとのm両方が素数であるのようなペアですm = n + 6

整数を取る関数を作成し、0からその整数までの素数をチェックして、配列の配列を返す必要があります。

たとえば、listSexy(30)戻り値[[5,11], [7,13], [11,17], [13,19], [17,23], [23,29]]または同等のものでなければなりません。

これはので、バイトカウントが最短のプログラムが勝ちます!


希望する出力形式がどのように見えるか説明できますか?
ハワード

11
ええと、答えが提出された後にチャレンジが変わるとき、私はそれが嫌いです。
グリフィン

2
0からチェックする理由はありますか?(5,11)からチェックしない方がいいのはなぜですか?セクシーな素数の簡単な定義をここに示す必要があります。ウィキペディアにリンクしてさらに読むことを歓迎します。
ユーザー不明

1
ポルトガル語では、セクシープライムはセクシーカズンズと同じです。
sergiol

回答:


11

MATLAB 32

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

nはあなたの番号です


+1それは仕事に適したツールですisprime。オペレーションが意図したものではありません。
Johannes Kuhn

5

J、34 33 31 32 39 37文字

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

両方の素数を制限以下に維持している文字を失いました...そして関数を宣言している別の7つです。

使用法:

   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

編集する

新しい答えの多くは関数を作成していないようで、入力を取得するか、ペアの両方の数を以下にn制限しています-これらの制限も無視すると、28文字まで取得できます。

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


3

GolfScript、32文字

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

出力形式が指定されていないため、上記のコードは各ペアの下位の素数を出力します。したがって、番号がxあれば含まれているxx+6の両方プライムであり、両方が以下の通りですn。入力はSTDINで単一の数値として与えられます。

> 150
[5 7 11 13 17 23 31 37 41 47 53 61 67 73 83 97 101 103 107 131]

両方の素数を印刷する必要があると思います。それはタスクの一部です。
ugoren

1
@ugorenバージョンを送信した後、タスクが変更されました。私はそれを私のバージョンにすぐに追加してみます。
ハワード

はい、あなたの答えは元のタスクと一致します。
ugoren

2

K3 /コナ、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)

また、Kの現在の具体化における同じソリューションは、組み込みのmod演算子がないため、K3ソリューションと同じですが、59に対して約14文字が追加されます。

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

2

パイソン(93 90 99 95)

迅速で汚れたisprime機能のためのイェーイ!

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

1代わりにTrue3つの文字を保存します...
Wooble

なぜそれを逃し続けるのですか?修繕。
beary605 2012年

制限パラメーターを取得しません。また、[]in all()は必要ありません(少なくともPython 2.7では)。
ugoren

うわー、本当に?涼しい!パラメータを実装します。
beary605 2012年

xから1を引く理由はわかりませんが、2文字分削除できます。次に、whileループを、2から別の2文字のinput()+ 1までのforループに置き換えることができます。
JPvdMerwe 2012

1

オクターブ39

新しい(迷惑な)ルールに準拠するように、MATLABの回答を変更しました。 nあなたの価値です。

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

ここでテストできます


1

C、102 99 95文字

Cで配列を返すのは避けたいことです。そのため、関数sは制限nと整数の配列へのポインターを取得し、データで埋めます。セクシーな素数の各ペアは、配列の2つの位置に配置されます。ですからo[0]=5o[1]=11o[2]=7o[3]=13。関数は、配列が十分な大きさであることを前提としています。

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;
}

1

R、83文字

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

使用法:

f(150)


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}

出力例:

[[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]]


1

パイソン、137 132 126 122 116

これは少し失敗だと思いますが、これが私の最初の答えです。

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]

リスト内包表記の使用、およびその事実 [] = False

f(x)実際にはのすべての要素が返され、xそれから素数を計算できます。


f(x)変換f=lambda x:not[y for y in range(2,x)if x%y==0]して、いくつかの文字を保存できます。ifリストの理解の最後でを減らすこともできますf(x)&f(y)&(x-6==y)
beary605 2012

@ beary605私はラムダについてよく知らないので(まあ、私は何も知りません)、それについて調べますが、そうです、ifsではありません。
ACarter

ラムダは値を返す無名関数です。a=lambda x,y,z:(value here)と同じdef a(x,y,z):return (value here)です。
beary605 2012

すごい、こだわりが出そうです。更新しました。ありがとう!
ACarter 2012

1

JavaScript(1ツイート= 140文字)

ここにあります:

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}

お試しくださいs(30)


1

J、25文字

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

i.n 範囲[0、n)を作成します

(,+&6)"0nリストの各整数を取り、ペアを作りますn, n+6

(#~ condition)は基本的にfilterであり、この場合の条件は*/"1@p:~&1、ペアが素数のみで構成されているかどうかを確認するだけです。


1

C#(279文字)

基本的に、これはいくつかの微調整を加えたSaumilのソリューションです。コメントの評判が足りないので...

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);}}}}

出力:

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

0

Perl:73文字

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

使用法:

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

出力:

5,11
7,13
11,17
13,19
17,23
23,29

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())+"]");}}}

オンラインテスト:http : //ideone.com/4PwTW (このテストではint.Parse(a[0])、ideone.comで実行されているプログラムにコマンドライン引数を指定できないため、実際のint値で置き換えました)


0

Mathematica- 69 48文字

mに値が割り当てられていると仮定します

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

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

出力例: 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))


0

ファクター140

この言語は面白くて面白いです。私の最初のスクリプト。

:: 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 ;

使用法:

( 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 }

0

PARI / GP(62文字)

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

例:

 (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]]

0

C#(321 303 290文字)

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);}}}}

出力:
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


CodeGolfへようこそ!クラスとメソッドに1文字の名前を付けると、いくつかの文字を保存できます(例:class Pではなくclass Program)。
クリスティアンルパスク2012

0

Haskell(65文字)

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

出力:

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

ここでMATLABの回答について

(私はすべての担当者を賞金に費やしたため、まだコメントできません)。グーグルは言う:「Matlabのisprime関数...は確率的なMiller-Rabinに基づいています」。したがって、MATLABエントリは失格にする必要があるようです。


0

R 85 81文字

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

実行例:

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

0

PHP、106バイト

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";

プログラムはn,n+6、改行で区切られたペアを出力します。で実行し-rます。

Elvisでゴルフする素数に戻るように、is_prime関数を変更(&バイトを保存)0しました。


0

ゼリー、13バイト(非競合)

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

オンラインでお試しください!

強化された説明:

‘Ḷµż+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.

-3

Obj-C 64文字

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

isPrimeは個別に実装されます


6
isPrime言語または標準ライブラリの一部ではない関数を宣言する場合は、その関数の文字数をスコアの一部として含める必要があります。
Gareth
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.