大まかな数値を生成する


15

バックグラウンド

のすべての素因数が厳密にを超える場合n、数はB-rough と記述することができます。nB

チャレンジ

2つの正の整数Bとを指定するとk、最初のk B大まかな数値を出力します。

ましょうf(B, k)最初のk B大まかな数を含むセットを返す関数になります。

> f(1, 10)
1, 2, 3, 4, 5, 6, 7, 8, 9, 10

> f(2, 5)
1, 3, 5, 7, 9

> f(10, 14)
1, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59

2
チャレンジについて詳しく説明していただけますか?わかりません。たぶん例を説明しますか?
デシベル

1より大きくないのに、すべての答えに1を含める理由がわかりませんB
kamoroso94

1
1には素因数がないため、1の素因数はすべてBより大きく、Bに依存しない出力に1が表示されるはずです
Hood

@dbプライムに分解nします。これらの素数がすべてより大きい場合B、nはB-roughです。
アディソンクランプ

@AddisonCrumpたとえば、35の素数は5と7であるため、35は4ラフです。これは一般的な用語として認識されていますか?これまで聞いたことがない。私はまだ例の下にいません、特に最後のものではありません。14個の数字ですが、10個とは何ですか?
db

回答:


5

Haskell53 44バイト

b%k=take k[n|n<-[1..],all((>0).mod n)[2..b]]

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

-9バイトのH.PWizに感謝します!

b%k=                       -- given inputs b and k
 take k                    -- take the first k elements from 
  [n|n<-[1..]              -- the infinite list of all n > 0
   ,all            [2..b]] -- where all numbers from 2 to b (inclusive)
      ((>0).mod n)         -- do not divide n.

これは多少簡略化できます
-H.PWiz

@ H.PWizそう、どういうわけか私は(>b)理解の内部で-partを使うことだけを考えました(これは機能しません)。ありがとう!
ライコニ

5

Pythonの380、75のバイト

lambda B,k:[i for i in range(1,-~B*k)if all(i%j for j in range(2,B+1))][:k]

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

5バイトを節約してくれたshooqieに感謝します。

これは、k番目のBラフ数がBkを決して超えないことを前提としていますが、これを証明する方法はわかりませんが、かなり安全な仮定のようです(反例が見つかりません)。

代替ソリューション:

Python 2、78バイト

B,k=input()
i=1
while k:
 if all(i%j for j in range(2,B+1)):print i;k-=1
 i+=1

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

このソリューションは、上記のソリューションを作成しませ。そして、はるかに効率的です。


3
うーん、その仮定はおそらく検証可能ですが、それでも興味深い問題です。私は証明のために報奨金を払います。
アディソンクランプ

1
どうしてlambda B,k:[i for i in range(1,-~B*k)if all(i%j for j in range(2,B+1))][:k]
shooqie

1
@BlackOwlKaiかっこいいですね。math.stackexchange.com/questions/2983364/
Anush

@アヌーシュ悲しいことに、私は間違いを犯したため、私の証明は機能しませんでした
ブラックオウルカイ


3

Perl 6の35の 32バイト

nwellnofのおかげで-3バイト!

{grep(*%all(2..$^b),1..*)[^$^k]}

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

2つの整数を受け取り、整数のリストを返す匿名コードブロック。

説明

{                              }  # Anonymous code block
 grep(             ,1..*)        # Filter from the positive integers
      *              # Is the number
       %             # Not divisible by
        all(      )  # All of the numbers
            2..$^b   # From 2 to b
                         [^$^k]   # And take the first k numbers

何をallするの?
アディソンクランプ

1
@AddisonCrump allは、リスト内のすべての要素が真実かどうかをチェックします。私はまもなく全体の説明を追加します
ジョーキング

@nwellnhofうわー!だから、ジャンクションは便利です!
ジョーキング

はい、[&]代わりにを使用することもできますall
nwellnhof

@AddisonCrump私allはもうそのような方法で使用されていないと思うので、答えを更新する必要があります。all範囲内の値のジャンクションを作成し、ジャンクションで2..b実行される操作はすべての値で同時に実行されます。それはによってブールコンテキストで評価されている場合grep、この崩壊ジャンクションのすべての値がtruthyであるかどうか、すなわち、非ゼロに
ジョー・キング


2

、33バイト

NθNη≔⁰ζW‹Lυη«≦⊕ζ¿¬Φθ∧κ¬﹪ζ⊕κ⊞υζ»Iυ

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

NθNη

入力 Bおよびk

≔⁰ζ

セットする z0にします。

W‹Lυη«

繰り返すまで繰り返します k値ます。

≦⊕ζ

インクリメント z

¿¬Φθ∧κ¬﹪ζ⊕κ

zから2までのすべての数で除算するB、残りがゼロかどうかを確認します。

⊞υζ»

そうでない場合は、プッシュ z、事前定義された空のリストにします。

Iυ

リストを文字列にキャストし、暗黙的に出力します。


2

JavaScript(ES6)、68バイト

入力をとして受け取ります(b)(k)

b=>k=>(o=[],n=1,g=d=>(d<2?o.push(n)==k:n%d&&g(d-1))||g(b,n++))(b)&&o

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

コメント済み

b => k => (             // input = b and k
  o = [],               // o[] = output array
  n = 1,                // n = value to test
  g = d => (            // g = recursive function, taking the divisor d
    d < 2 ?             // if d = 1:
      o.push(n) == k    //   push n into o[] and test whether o[] contains k elements
    :                   // else:
      n % d && g(d - 1) //   if d is not a divisor of n, do a recursive call with d - 1
    ) ||                // if the final result of g() is falsy,
    g(b, n++)           // do a recursive call with d = b and n + 1
)(b)                    // initial call to g() with d = b
&& o                    // return o[]



1

APL(NARS)、52文字、104バイト

r←a f w;i
r←,i←1⋄→3
i+←1⋄→3×⍳∨/a≥πi⋄r←r,i
→2×⍳w>↑⍴r

上記の 'r←afw; i'の後の行は名前1 2 3; testを持っているようです:

  o←⎕fmt
  o 1 h 2
┌2───┐
│ 1 2│
└~───┘
  o 1 h 1
┌1─┐
│ 1│
└~─┘
  o 10 h 14
┌14───────────────────────────────────────┐
│ 1 11 13 17 19 23 29 31 37 41 43 47 53 59│
└~────────────────────────────────────────┘

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