产生一些粗略的数字


15

背景

如果所有主要因子均严格超过,则数字n可描述为B-rough 。nB

挑战

给定两个正整数Bk,输出第一个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
您能详细说明挑战吗?我不明白 也许解释例子?
db

我不明白为什么您在所有答案中都包含不大于1的数字B
kamoroso94 '18

1
1没有素因子,因此每1素因子比B和1大应该出现在输出独立B的
遮光罩

@db分解n为素数。如果所有这些质数均大于B,则n为B-粗糙。
Addison Crump

@AddisonCrump例如,既然35的质数是5和7,则35的质数是4?这是一些公认的通用术语吗?以前从未听说过。我仍然不关注这些示例,尤其是最后一个示例。14个数字,但是10是什么?
db

Answers:


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是的,我以某种方式只考虑将(>b)-part放在理解范围内(这不起作用),反之则不行。谢谢!
Laikoni '18

5

Python 3中80,75个字节

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

在线尝试!

感谢shooqie节省了5个字节。

假设第k个B粗糙数永远不会超过Bķ,我不知道如何证明,但似乎是一个相当安全的假设(并且我找不到任何反例)。

替代解决方案:

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
嗯,这个假设可能是可以验证的,但仍然是一个有趣的问题。我会悬赏求证。
Addison Crump

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

@Anush可悲的是,我的证明没有用,因为我犯了一个错误
Black Owl Kai


3

Perl 6的35 32个字节

-3个字节感谢nwellnof!

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

在线尝试!

一个匿名代码块,它接受两个整数并返回一个整数列表。

说明

{                              }  # 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办?
Addison Crump

1
@AddisonCrump all检查列表中的所有元素是否真实。我不久将加入对整个事情的解释
乔金

@nwellnhof哇!这就是Junctions有用的地方!
Jo King

是的,请注意,您也可以使用[&]代替all
nwellnhof '18

@AddisonCrump我想all不再以这种方式使用,所以我应该更新我的答案。all创建范围内的值的Junction 2..b,并且对Junction执行的所有操作都会同时对所有值执行。当它在Boolean上下文中求值时,它会grep崩溃为Junction中的所有值是否均为真,即非零
Jo King

3

外壳9 8字节

↑foΛ>⁰pN

在线尝试!

ķ

↑         -- take the first k elements 
       N  -- from the natural numbers
 f        -- filtered by
  o   p   -- the prime factors
   Λ>⁰    -- are all larger than the first input

2

木炭,33字节

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

在线尝试!链接是详细版本的代码。说明:

NθNη

输入Bk

≔⁰ζ

设置z为0。

W‹Lυη«

重复直到有k值为止。

≦⊕ζ

增量z

¿¬Φθ∧κ¬﹪ζ⊕κ

z所有数字除以2B,看是否还有零。

⊞υζ»

如果没有,则推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

果冻,10字节

1µg³!¤Ịµ⁴#

在线尝试!

怎么运行的

1µg³!¤Ịµ⁴#    Dyadic main link. Left = B, right = k
       µ⁴#    Take first k numbers satisfying...
  g             GCD with
   ³!¤          B factorial
      Ị         is insignificant (abs(x) <= 1)?
1µ            ... starting from 1.


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│
└~────────────────────────────────────────┘

1

05AB1E,9 个字节

∞ʒÒ¹›P}²£

在线尝试验证所有测试用例

说明:

          # Infinite list starting at 1: [1,...]
 ʒ    }    # Filter it by:
  Ò        #  Get all prime factors of the current number
   ¹›      #  Check for each if they are larger than the first input
     P     #  And check if it's truthy for all of them
       ²£  # Leave only the leading amount of items equal to the second input
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.