セクシーな素数は(n, m)
、n
とのm
両方が素数であるのようなペアですm = n + 6
。
整数を取る関数を作成し、0からその整数までの素数をチェックして、配列の配列を返す必要があります。
たとえば、listSexy(30)
戻り値[[5,11], [7,13], [11,17], [13,19], [17,23], [23,29]]
または同等のものでなければなりません。
これはコードゴルフなので、バイトカウントが最短のプログラムが勝ちます!
セクシーな素数は(n, m)
、n
とのm
両方が素数であるのようなペアですm = n + 6
。
整数を取る関数を作成し、0からその整数までの素数をチェックして、配列の配列を返す必要があります。
たとえば、listSexy(30)
戻り値[[5,11], [7,13], [11,17], [13,19], [17,23], [23,29]]
または同等のものでなければなりません。
これはコードゴルフなので、バイトカウントが最短のプログラムが勝ちます!
回答:
i=1:n;i(isprime(i)&isprime(i+6))
nはあなたの番号です
isprime
。オペレーションが意図したものではありません。
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.)
~),2>{:P{(.P\%}do(!},:L{6+L?)},p
出力形式が指定されていないため、上記のコードは各ペアの下位の素数を出力します。したがって、番号がx
あれば含まれているx
とx+6
の両方プライムであり、両方が以下の通りですn
。入力はSTDINで単一の数値として与えられます。
> 150
[5 7 11 13 17 23 31 37 41 47 53 61 67 73 83 97 101 103 107 131]
{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}
迅速で汚れた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
代わりにTrue
3つの文字を保存します...
[]
in all()
は必要ありません(少なくともPython 2.7では)。
新しいバージョンでは、Artem Iceのプライムテストメソッドを使用しています。
z=->x{(9..x).map{|i|[i-6,i]}.select{|a|a.all?{|r|(2...r).all?{|m|r%m>0}}}}
オンラインテスト:http : //ideone.com/yaOdn
これは少し失敗だと思いますが、これが私の最初の答えです。
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)
。
a=lambda x,y,z:(value here)
と同じdef a(x,y,z):return (value here)
です。
基本的に、これはいくつかの微調整を加えた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
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値で置き換えました)
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))
この言語は面白くて面白いです。私の最初のスクリプト。
:: 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 }
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
class P
ではなくclass Program
)。
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のisprime関数...は確率的なMiller-Rabinに基づいています」。したがって、MATLABエントリは失格にする必要があるようです。
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
しました。
‘Ḷµż+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.
Obj-C 64文字
if([self isPrime:i]&&[self isPrime:i+6])NSLog(@"%d %d\n",i,i+6);
isPrimeは個別に実装されます
isPrime
言語または標準ライブラリの一部ではない関数を宣言する場合は、その関数の文字数をスコアの一部として含める必要があります。