連続した素数の積


11

サンドボックスへの提出時点では、17017の評判がありました。これは、4つの連続した素数の積である7×11×13×17として分解できます。

入力整数までの2つ以上の連続する素数のすべての積を出力する関数またはプログラムを作成してくださいn。たとえば、n=143出力する必要がある場合6, 15, 30, 35, 77, 105, 143(または同等の出力形式)。

I / Oおよび抜け穴に関する通常の制限が適用されます。

これはなので、最短のプログラムが優先されます。



2
出力をソートする必要がありますか?
致命的

@Fatalize私はそれがソートされることを意味していましたが、私はそれを十分に指定しなかったことがわかり、ソートされたリストを出力しないいくつかの答えがすでにあります。
ニール

回答:


6

ゼリー14 10 バイト

(間違いなくここでゴルフができます!-
うん...)@Dennisのおかげで-4バイト-範囲を使用してnより大きいチェックを置き換えます

ÆRẆP€ḟÆRfR

注-これは非常に非効率的であり、結果は分類されていません。

TryItOnlineでテストする

どうやって?

ÆRẆP€ḟÆRfR - main link takes an argument, n
ÆR    ÆR   - primes up to n
  Ẇ        - all sublists
   P€      - product for each
     ḟ     - filter out the primes (since the sublists include those of lnegth 1)
        fR - filter out any not in range [1,N]
             (yep, it's calculating all products of primes up to n - gross)

2
あなたは必要µありません³; >Ðḟそれ自体でうまく動作します。fRさらに短いです。
デニス

@デニス-あなたの優れた方法を待っています。ありがとう!
ジョナサンアラン

4

MATL25 20バイト

Zq&Xf"@gnq?2MpG>~?6M

ジョナサンアランの答えと同様のアプローチ。

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


古いバージョン、25バイト

:YF!"@2<@sq0@0hhdz2=v?X@D

これ1は、入力からのすべての数値の素因数分解の指数を取得します。それぞれについてチェックします:

  1. すべての指数が2未満の場合。
  2. すべての指数の合計が1より大きい場合。
  3. 指数の配列が拡張され、両端にゼロが追加されます。拡張配列の連続した差が計算されます。ゼロ以外の違いが正確に2つあるはずです。

3つの条件が満たされると、番号が表示されます。結果は昇順です。


4

Javascript(ES6)、105 104バイト

n=>{for(i=1,P=[];i++<n;P[P.every(v=>i%v)?i:n]=i);P.map(i=>P.map(j=>j>i&&(p*=j)<=n&&console.log(p),p=i))}

デモ

var f =
n=>{for(i=1,P=[];i++<n;P[P.every(v=>i%v)?i:n]=i);P.map(i=>P.map(j=>j>i&&(p*=j)<=n&&console.log(p),p=i))}

f(143)



1

Pyth、18バイト

f}PTftlY.:fP_YSQ)S

STDINで整数の入力を受け取り、整数のリストを出力するプログラム。

オンラインで試す

使い方

f}PTftlY.:fP_YSQ)S  Program. Input: Q
              SQ    Yield [1, 2, 3, ..., Q]
          fP_Y      Filter that by primality
        .:      )   Yield all sublists of that
    f               Filter the sublists by:
      lY             Length
     t               -1
                    removing sublists of length 1
f                S  Filter [1, 2, 3, ..., Q] (implicit input fill) by:
  PT                 Prime factorisation
 }                   is in the sublists
                    Implicitly print

1

ゼリー、11 バイト

ÆfÆCI=1Ȧµ€T

最短のゼリーの答えではありませんが、このアプローチはかなり効率的であり、出力はソートされます。

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

使い方

ÆfÆCI=1Ȧµ€T  Main link. Argument: n

        µ€   Map the preceding chain over each k in [1, ..., n].
Æf             Compute all prime factors of k, with multiplicities.
  ÆC           Count the number of primes less than or equal to each prime factor.
               This maps the j-th to j.
    I          Increments; compute the forward differences of consecutive indices.
     =1        Compare each difference with 1.
       Ȧ       All; return 1 iff the array is non-empty and has no zeroes.
          T  Truth; yield all indices for which the chain returned 1.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.