거친 숫자 생성


15

배경

의 모든 주요 요소가 엄격히 초과 하면 숫자 nB대략 으로 설명 할 수 있습니다 .nB

도전

두 개의 양의 정수 B와가 주어지면 k처음 k B거친 숫자를 출력하십시오 .

하자 f(B, k)첫 번째가 포함 된 세트 반환하는 함수가 될 k B-rough 번호.

> 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보다 크지 않을 때 모든 답변에 1을 포함시키는 이유를 이해하지 못 B합니까?
kamoroso94 17

1
1에는 소인수가 없으므로 1의 모든 소인수는 B보다 크고 1은 B와 무관 한 출력에 나타나야합니다.
Hood

@db n소수로 분해 합니다. 이러한 소수가 모두보다 크면 Bn은 B거의 없습니다.
애디슨 크럼프

@AddisonCrump 예를 들어 35의 소수는 5이고 7은 35가 4 정도이기 때문에? 이것이 일부 공통된 용어입니까? 전에는 들어 본 적이 없습니다. 나는 여전히 예제 아래에 있지 않으며, 특히 마지막 예제는 아닙니다. 14 개의 숫자지만 10은 무엇입니까 ??
db

답변:


5

하스켈 , 53 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)이해가 안되는 부분을 이해하지 못했지만 (작동하지 않는) 다른 방법은 아닙니다. 감사!
Laikoni

5

파이썬 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]

온라인으로 사용해보십시오!

5 바이트를 절약 한 shooqie 에게 감사 합니다.

이것은 k 번째의 거친 숫자가 절대 초과하지 않는다고 가정합니다. 케이나는 그것을 증명하는 방법을 모르지만 상당히 안전한 가정처럼 보입니다 (그리고 나는 반대의 예를 찾을 수 없습니다).

대체 솔루션 :

파이썬 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

내가 실수했기 때문에 @Anush 슬프게도, 내 증거는 작동하지 않았다
블랙 올빼미 카이


3

펄 6 , 35 32 바이트

nwellnof 덕분에 -3 바이트!

{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합니까?
애디슨 크럼프

1
@AddisonCrump all checks if all the elements in the list are truthy. I will be adding an explanation for the whole thing shortly
Jo King

@nwellnhof Wow! So that's what Junctions are useful for!
Jo King

Yes, note that you could also use [&] instead of all.
nwellnhof

@AddisonCrump I guess all isn't being used in that way any more, so I should update my answer. all creates a Junction of the values in the range 2..b, and any operations performed on the Junction gets performed on all the values simulataneously. When it is evaluated in Boolean context by the grep, this collapses into whether all the values in the Junction are truthy, ie non-zero
Jo King

3

Husk, 9 8 bytes

↑foΛ>⁰pN

Try it online!

Takes B as first and k as second input.

↑         -- 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.

≔⁰ζ

z0으로 설정하십시오 .

W‹Lυη«

우리가 k가치 를 가질 때까지 반복하십시오 .

≦⊕ζ

증분 z.

¿¬Φθ∧κ¬﹪ζ⊕κ

나누기 z에서 모든 숫자에 의한 2B어떤 나머지가 0 인 경우와 참조하십시오.

⊞υζ»

그렇지 않은 경우 z사전 정의 된 빈 목록으로 푸시 하십시오.

Iυ

목록을 문자열로 캐스트하고 내재적으로 출력하십시오.


2

자바 스크립트 (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.