연속 프라임 제품


11

샌드 박스에 제출 한 시점에서 나는 17017의 명성을 얻었으며, 이는 모두 4 개의 연속 프라임의 곱인 7 × 11 × 13 × 17으로 분해 할 수 있습니다.

둘 이상의 연속 된 소수의 모든 곱을 입력 정수까지 출력하는 함수 또는 프로그램을 작성하십시오 n. 예를 들어, n=143출력 6, 15, 30, 35, 77, 105, 143(또는 동등한 출력 형식)을 지정 해야합니다 .

I / O 및 허점에 대한 일반적인 제한 사항이 적용됩니다.

이것은 이므로 가장 짧은 프로그램이 승리합니다.



2
출력을 정렬해야합니까?
Fatalize

@ Fatalize 나는 그것이 정렬되어야한다는 것을 의미했지만, 그것을 충분히 지정하지 않았으며 정렬 된 목록을 출력하지 않는 몇 가지 답변이 이미 있습니다.
Neil

답변:


6

젤리 , 14 10 바이트

(! 의심의 여지가 여기에서 거기 골프를하지 않습니다 - ... 그래)
-4 @Dennis 덕분 바이트 - 범위를 사용하여 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더 짧습니다.
Dennis

@ 데니스-당신의 뛰어난 방법을 기다리고 있습니다. 감사!
Jonathan Allan

4

MATL , 25 20 바이트

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

Jonathan Allan의 답변 과 비슷한 방식으로 접근하십시오 .

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


이전 버전, 25 바이트

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

이것은 1입력 에서 모든 숫자에 대한 소인수 분해 지수를 얻습니다 . 각각에 대해 다음을 확인합니다.

  1. 모든 지수가 2보다 작은 경우
  2. 모든 지수의 합이 1보다 큰 경우
  3. 지수 배열은 각 끝에 추가 0으로 확장됩니다. 확장 배열의 연속적인 차이가 계산됩니다. 정확히 0이 아닌 2 개의 차이가 있어야합니다.

세 가지 조건이 충족되면 숫자가 표시됩니다. 결과는 오름차순입니다.


4

자바 (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)


2

05AB1E , 17 15 바이트

L<ØŒ€PD¹>‹ÏDp_Ï

설명

L<Ø                 # get the first N primes, where N is the input
   Œ                # get all combinations of consecutive primes
    €P              # calculate the product of these sublists
      D¹>‹Ï         # keep only the products less than or equal to N
           Dp_Ï     # keep only those that aren't prime

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


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.