多数の素数


11

1234567891011121314151617などの(10を基数とする)大きい数を指定すると、その中の素数の「サブ番号」を見つけます。
素数の「サブ番号」は、連続した数字列(入力から取得)であり、素数(10を底とする)を表します。

  • 入力:数値(文字列、ファイル、または任意のもの)。
  • 出力:何らかの形で区切られたすべての素数(リスト、ファイル、コンマ区切りの文字列のいずれか...)クラッシュ。
  • 例えば
    > 2、3、23から1234
    6542 - > 5、2
    14 - > [..空の出力]

これはコードゴルフです。最短のプログラムが勝ちます!
[編集]:追加ルール、プログラムを説明する必要があります!誰もがゼリーに堪能ではない:)




1
指定されていない。好きなことをしてください。
レジスポルタレス

1
ヒント:回答を受け入れるには早すぎます。他の人がソリューションを投稿するのを思いとどまらせることができます。
シャギー

2
@RegisPortalezようこそ、素敵なチャレンジ!PPCGでは、ネットワーク内の他のサイトと同じように、「受け入れ」機能はそれほど使用されていないことがわかりました。私たちはどんな言語でもいい答えを評価する傾向があります。
ngm

回答:


6

05AB1E(レガシー)、3バイト

Œʒp

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

素数である入力の部分文字列。


それを短くするのは難しいでしょう:)
レジスポルタレス

このタスクに適した言語
ジョナサンアラン

5
@mobそれはエンコーディングに依存します。で05AB1Eエンコーディング、この答えは、3バイトの長さ。
デニス

2
これによれば、34567 = 13 * 2659は素数であり、間違っているようです:tio.run
##

2
@frosqhこれは、実際には新しい05AB1Eリリースのp(prime)関数のバグです:tio.run / ##yy9OTMpM / f//6KRTkwr@ / zc2MTUzBwA これはリポジトリですでに修正されていますが、TIOにはプッシュされていません。その間、私は答えをレガシーバージョンに切り替えました。
カルド

6

Perl 6、28バイト

{grep &is-prime,+«m:ex/.+/}

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

:exマッチ演算子への( "exhaustive")フラグは、一致mするものすべて.+(つまり、1つ以上の文字のすべての部分文字列)を返します。ハイパー演算子は、そのMatchオブジェクトのリストを数値に変換しgrep &is-primeます。数値は、によってプライムネスのためにフィルタリングされます。


ここで私は行くつもりだった{+«m:ex/(.+)<?{$0.is-prime}>/}
ブラッドギルバートb2gills

@ BradGilbertb2gills私もそれを試しました!私はそれが長くなったことが少しがっかりしています。
ショーン

説明してくれてありがとう-私のようなPerl 4の恐竜にはいつも役立つ!
トビー・スペイト


5

パイソン266の 65バイト

P=k=1
n=input()
while~n+k:
 if`k`in`n`>0<P%k:print k
 P*=k*k;k+=1

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


あるべきwhile k<=nコストに、0バイト、またはwhile~n+k
ジョナサン・アラン

@JonathanAllanありがとうございます。最初は、数値自体を出力から除外する必要があると考えましたが、そうではないようです。
ovs

@JonathanAllan while声明のコードを説明してください。私は以前にこのタイプのコードを見たことがありません。``の使用も見ていません、それは何をしますか?
タリットゴスワミ18

1
@taritgoswami while stmt:stmt、Pythonによって真理と見なされる値を持つ限り実行されます。Pythonで唯一の偽の整数はです0。したがって、コードはとして実行され~n+k != 0ます。~はビット単位の補数演算子であり、~nと同等-n - 1です。~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1。すべての操作でをインクリメントk1ているため、k != n + 1この場合はと同等k <= nです。
ovs

1
@taritgoswami And `n`repr(n)Python 2 と同じです(Python 3では機能しません)。
-ovs


3

ゼリー 5  4 バイト

-1 Kevin Cruijssenに感謝します(のエイリアスですÆP

ẆḌẒƇ

素数のリストを生成する数字*のリストを受け入れる単項リンク。

*「文字列、ファイル、またはあなたが好きなもの」で行く-整数を取得するには、コードの前に D

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

どうやって?

ẆḌẒƇ - Link: list of integers (digits)   e.g. [1,2,3,4]
Ẇ    - non-empty contiguous substrings        [[1],[2],[3],[4],[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]]
 Ḍ   - convert to decimal (vectorises)        [1,2,3,4,12,23,34,123,234,1234]
   Ƈ - filter keep if:
  Ẓ  -   is prime?                            [2,3,23]

ÆPすることができ、私は間違っていない場合は?
ケビンCruijssen

ああ、それは新しいエイリアスの1つです-ありがとう!
ジョナサンアラン

2

Java 8、148 147バイト

n->{for(int l=n.length(),i=l,j;i-->0;)for(j=l;j>i;){long k=2,x=new Long(n.substring(i,j--));for(;k<x;x=x%k++<1?0:x);if(x>1)System.out.println(x);}}

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

説明:

n->{                     // Method with String parameter and no return-type
  for(int l=n.length(),  //  Length of the input-String
          i=l,j;         //  Temp-integers
      i-->0;)            //  Loop `i` in the range [length, 0)
    for(j=l;j>i;){       //   Inner loop `j` in the range [length, 0)
      for(long k=2,      //    Set `k` to 2
               x=new Long(n.substring(i,j--)
                         //    Take the substring [`i`, `j`) from the input,
            );           //    convert it to a long, and set it as `x`
          k<x;           //    Inner loop as long as `k` is still smaller than `x`
        x=x%k++<1?       //     If `x` is divisible by `k`:
           0             //      Set `x` to 0
          :              //     Else:
           x);           //      Leave `x` unchanged
      if(x>1)            //    If `x` is now larger than 1 (a.k.a. If `x` is a prime):
        System.out.println(x);}}
                         //     Print `x` with a trailing newline to STDOUT


2

Bash + GNU Core Utils:80 77バイト

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|grep -oP ': \K\d+$'
}

これは最短ではありませんが、より良いものを思い付くのに苦労しています。従業員求む!

POSIXのみに固執することで、82を得ました。

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}

Bashの文字列スライシングは役立ちますか?それは...恥ブレースの範囲はパラメータの前に展開されます
トビースパイツ

2つのループ(1つは開始、1つは終了)を必要とする@TobySpeight。もちろん、スライシング置換の中で変数を使用することはできません。Zshはそれを許可します!私の頭の中の短所への主なルートは、Awkを使用してすべての部分文字列を生成することです。
markasoftware





0

Pyth、8バイト

fP_TsM.:

テストスイート

入力を文字列として受け取り、整数のリストを出力します。余分なバイトを最後にint 追加することにより`、入力を受け取ることもできます。

説明:
fP_TsM.:  | Full code
fP_TsM.:Q |  with implicit variables added
          | Print (implicit)
      .:Q |  list of all substrings of the input
    sM    |   converted to integers
fP_T      |    filtered for prime numbers

そして、`単にに変換intstrます。


0

Wolfram言語(Mathematica)、40バイト

Select[PrimeQ@*FromDigits]@*Subsequences

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

入力と出力は数字のリストです。素数のサブ番号がない場合、空のリスト{}が返されます。

使用する@*ためCompositionの機能。Subsequences入力のすべてのサブシーケンスのリストを提供します。これは、を返すすべての要素のリストを返すSelect[PrimeQ@*FromDigits]演算子形式です。SelectPrimeQ@*FromDigitsTrue


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