クレイジーライブラリアンの素数の算術シーケンス


18

司書は、ソートアルゴリズムを使用して、あなたが仕事で不正行為をしているのを見つけたので、今、あなたは罰されています。あなたは、司書が彼らの片思いの愛情の対象である数学教師に印象づけることができるように、いくつかのコードを作成するように命じられました。それ「割り当てられたその他の義務」の意味です...

誰もがNと呼ばれる10進数の自然数列に精通しています:

0、1、2、3、4、5、6、...

それから、我々はのは、それを呼びましょう、素数列を生成することができますP内のすべての要素ように、Pはでちょうど二つの約数を持つN、すなわち、1それ自体。このシーケンスは次のとおりです。

2、3、5、7、11、13、...

OK、これまではかなり日常的なことです。

気の利いた機能の司書思想F(x、y)の数値をとるxからN状態で0 <= x <= 9、そして数yからN、および挿入xy全ての位置(すなわち、プリペンド、挿入、又は付加での小数展開xy)、並べ替えられた新しい数値のセットを返します。
たとえば、F(6、127)は次のようになります

1267、1276、1627、6127

それはまだ退屈です。ビットアップスパイス物事への司書欲求より代わりに新しい機能を指定することはz -> {p : p in P and F(z,p) subset of P}、昇順にソートされました。
たとえば、z(7)

3、19、97、433、487、541、...

ため3773の両方プライムあり、719 179そして197すべてのプライム、などです

z(2)は空であることに注意してください。なぜなら、2追加された素数はまだ素数ではないからです。{0,4,5,6,8}についても同様です。

あなたの仕事は、与えられたxに対してシーケンスz(x)の最初の100個の数字を生成して出力するコードを書くことです。

入力

のような単一の整数x0 <= x <= 9。入力には、関数の引数、STDIN、または同等のものを使用できます。

出力

シーケンスが上記のようにz(x)を満たすように、STDOUTまたは同等の値で区切られた、最初の100個の数字のシーケンス。場合Z(x)は {0,2,4,5,6,8}の場合のように、空である、言葉はEmpty Set代わりに出力されるべきです。

制限事項

  • これはコードゴルフです。これは、これをインデックスカードに転写して、司書が数学の先生を見せ、手がけいれんするのを簡単にするためです。
  • 標準的な抜け穴の制限が適用されます。司書は不正行為を容認しません。

参照シーケンス

x = 1:A069246
x = 3:A215419
x = 7:A215420
x = 9:A215421

関連: 最大壊れやすいプライムを探す / ストリングから最小の素数を探す / まだ桁の削除後の素数である最大の素数を探します

回答:


5

Pyth、49バイト

Python3や他のPythの回答のように、100個の数字を検索するためのランタイムは非常に高いです。(テストスイートは10を与えます)

?}z"1379".f&!tPZ!|FmtPvjzc`Z]dhl`Z*TT3"Empty Set"

オンラインで試す


1
末尾"は不要ですが、とてもいい仕事です。
FryAmTheEggman

リマインダーをありがとう。EOLが文字列を終了しなくなったため、終了していない文字列を回避しましたが、もちろん、EOFは引き続き機能します
ブライアンタック

4

Python 3、188バイト

x=input()
k=1
i=100
if x in"024568":i=print("Empty Set")
while i:k+=1;s=str(k);i-=all(sum(p%d<1for d in range(2,p))<4for p in[k*int(s[:j]+x+s[j:])for j in range(len(s)+1)])and not print(k)

ひどくゴルフをしたが、今のところはここにある。チェックする代わりにp in P and F(z,p) subset of P、それp*fがそれぞれの準素数であることをチェックしますf in F(z,p)。それを素数性テストの試行分割と組み合わせると、O(scary)アルゴリズムが得られます。


+1O(scary)
AdmBorkBork

1
iをNoneに設定するのに便利です。
リトシアスト

3

Perl、124バイト

$p=prime_iterator;y/1379//or$i=+~print'Empty Set'}while($i<100){$_=&$p;is_prime"$`@F$'"or redo while//g;$i++

次のコマンドラインオプションが必要です。16 -palMntheory=:allとしてカウントされます。stdinからの入力。

perlに@DanaJMath::Prime::Utilモジュールを使用します(プラグマでロードされますntheory)。で入手:

cpan install Math::Prime::Util
cpan install Math::Prime::Util::GMP

is_prime2 64未満のすべての値については決定論的であり、目的にはこれで十分です。


サンプルの使用法

$ echo 2|perl -palMntheory=:all oscary.pl
Empty Set

$ echo 7|perl -palMntheory=:all oscary.pl
3
19
97
433
487
541
691
757
853
1471
.
.
.
718705783
720574573
737773357
745157779
747215167
767717017
768743377
770294977
771778477
774577777

期待されるランタイム

x = 1:1m 09.2s
x = 3:0m 04.2s
x = 7:2m 52.5s
x = 9:0m 11.5s


1

ピス、58

L}bPb|*"Empty Set"}Qj204568T.f&yZ.Amyi++<JjZTdQ>JdThl`Z100

このテストスイートは、残りを生成するには時間がかかりすぎるため、最初の10個の数値のみを計算します。ブルートは、素数性と数字の挿入の両方を強制します。100まで実行することができなかったほどの悪いパフォーマンスを示しているので、問題がある場合は教えてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.