주변 요인이있는 정수의 대략적인 비율


11

1이 요인으로 계산되지 않으면

  • 40에는 두 가지 주변 요인이 있습니다 (4 및 5)
  • 1092에는 두 가지 요인이 있습니다 (13 및 14).
  • 350에는 두 개의 주변 요인이 없습니다 (인수 2, 5, 7, 10, 14, 25, 35, 50, 70 및 175 중에서 두 개가 연속되지 않음)

이 속성을 갖는 양의 정수의 비율은 6 (2 × 3), 12 (3 × 4), 20 (4 × 5), 30, 56,…로 나눌 수있는 비율입니다. 이들 중 첫 n 으로 나눌 수있는 비율 만 계산하면 n이 증가함에 따라 더 정확한 근사값을 얻습니다 .

예를 들어, n = 1 의 경우 정수의 비율을 2 × 3 = 6 (1/6)으로 나눌 수 있습니다. 들면 N = 2 3 × 4 = 12 (6)도 나눌 의해 근사 여전히 1/6 정도로 모든 정수, 나눌. 를 들어 N = 3 (6) 또는 (20)가 1/5 등으로 정수의 비율 나누어.

처음 몇 개의 값은 다음과 같습니다.

1  1/6                0.16666666666666666
3  1/5                0.20000000000000000
6  22/105             0.20952380952380953
9  491/2310           0.21255411255411255
12 2153/10010         0.21508491508491510
15 36887/170170       0.21676558735382265
21 65563/301070       0.21776663234463747
24 853883/3913910     0.21816623274423785
27 24796879/113503390 0.21846817967287144

제공된 값 사이 의 n 값은 출력이 위 값의 출력과 같아야합니다 (예 : n = 5 → 1/5).

프로그램은 n 을 취하여 분수 또는 소수 답변을 출력 해야합니다 . 오프셋에서 n 을 사용할 수 있습니다 (예 : 1- 인덱싱 대신이 순서로 0- 인덱싱 또는 2- 인덱싱).

10 진수 출력의 경우, 모든 테스트 사례에 대해 프로그램이 5 자리 이상이어야합니다.

스코어링은 이며 가 가장 짧습니다.

에서 영감을 받음 양의 정수의 비율 중 1만큼 다른 두 가지 요인이 있습니까? marty cohen에 의해 -특히 Dan 의 답변에 의해 .


1
십진법 대답은 얼마나 정확해야합니까? 자연스러운 전략은 일부 거대한 범위에서 유효한 제수로 정수를 계산하고 범위의 길이로 나누는 것 같습니다. 범위가 커질수록 근사치로 더 좋습니다.
xnor

@ xnor 나는 지금 게시물에서 그 문제를 해결했습니다.
Doorknob

답변:


6

젤리 ,  14 13  10 바이트

-1 Outgolfer의 Erik을 사용하여 0과 1의 목록 평균을 취합니다.
3-인덱싱을 사용하여 -3 (질문에 허용 된대로)-이것을 지적한 Dennis에게 감사드립니다.

ḊPƝḍⱮ!Ẹ€Æm

정수를 받아들이는 모나 딕 링크 n+2는 플로트를 생성합니다.

온라인으로 사용해보십시오! (범위의 분 산성을 테스트하므로 매우 비효율적)[2,(n+2)!]

(로 시작 +2µḊPƝḍⱮ!§T,$Ẉ복용 n및 산출 [numerator, denominator], 비 환원)

어떻게?

ḊPƝḍⱮ!Ẹ€Æm - Link: integer, x=n+2
Ḋ          - dequeue (implicit range of) x  - i.e. [2,3,4,...,n+2]
  Ɲ        - apply to neighbours:
 P         -   product                             [2×3,3×4,...,(n+1)×(n+2)]
     !     - factorial of x                        x!
    Ɱ      - map across (implicit range of) x! with:
   ḍ       -   divides?                            [[2×3ḍ1,3×4ḍ1,...,(n+1)×(n+2)ḍ1],[2×3ḍ2,3×4ḍ2,...,(n+1)×(n+2)ḍ2],...,[2×3ḍ(x!),3×4ḍ(x!),...,(n+1)×(n+2)ḍ(x!)]]
       €   - for each:
      Ẹ    -   any?  (1 if divisible by any of the neighbour products else 0)
        Æm - mean

흠 ... 나는 이것을 내 것보다 짧게 만드는 !것이 대신에 사용하는 것 같다 æl/.
Outgolfer Erik

@EriktheOutgolfer 예, 자세히 보면 매우 비슷한 방법입니다! P13 세까지 사용할 수 있습니까?
Jonathan Allan

대신에 Ẹ€? 나는와 P동일 ׃1$하므로 작동하지 않습니다. (그리고 어쨌든 14가 될 것입니다 ...) 대신에 æl/(아마도 LCM * k 일 것 P 입니다 ).
Outgolfer Erik

@EriktheOutgolfer 대신æl/
Jonathan Allan

그래, 내가 할 수 있다고 생각하고 그 결과는 이론적으로 æl/내가 생각하는 것만 큼 ​​정확할 것입니다 . 편집을 (야간 올빼미 골프는 ... 문제가 않습니다) : 그래, 난에 TIO을 통해 인수를 감소해야하지만 4... : P
에릭 Outgolfer

3

05AB1E , 15 바이트

Ì©!Lε®LüP¦Öà}ÅA

@JonathanAllan 의 젤리 답변 포트 도 매우 느립니다.

온라인으로 시도 하거나 처음 세 가지 테스트 사례를 확인하십시오 .

설명:

Ì                 # Add 2 to the (implicit) input
                  #  i.e. 3 → 5
 ©                # Store this in the register (without popping)
  !               # Take the factorial of it
                  #  i.e. 5 → 120
   L              # Create a list in the range [1, (input+2)!]
                  #   i.e. 120 → [1,2,3,...,118,119,120]
    ε       }     #  Map over each value in this list
     ®            #  Push the input+2 from the register
      L           #  Create a list in the range [1, input+2]
                  #   i.e. 5 → [1,2,3,4,5]
       ü          #  Take each pair
                  #    i.e. [1,2,3,4,5] → [[1,2],[2,3],[3,4],[4,5]]
        P         #   And take the product of that pair
                  #    i.e. [[1,2],[2,3],[3,4],[4,5]] → [2,6,12,20]
         ¦        #  Then remove the first value from this product-pair list
                  #   i.e. [2,6,12,20] → [6,12,20]
          Ö       #  Check for each product-pair if it divides the current map-value
                  #  (1 if truthy; 0 if falsey)
                  #   i.e. [1,2,3,...,118,119,120] and [6,12,20]
                  #    → [[0,0,0],[0,0,0],[0,0,0],...,[0,0,0],[0,0,0],[1,1,1]]
           à      #  And check if it's truthy for any by taking the maximum
                  #   i.e. [[0,0,0],[0,0,0],[0,0,0],...,[0,0,0],[0,0,0],[1,1,1]]
                  #    → [0,0,0,...,0,0,1]
             ÅA   # After the map, take the mean (and output implicitly)
                  #  i.e. [0,0,0,...,0,0,1] → 0.2

3

자바 스크립트 (ES6),  94 92  90 바이트

@Shaggy 덕분에 2 바이트가 절약되었습니다.

소수 근사값을 반환합니다.

n=>(x=2,g=a=>n--?g([...a,x*++x]):[...Array(1e6)].map((_,k)=>n+=a.some(d=>k%d<1))&&n/1e6)``

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


자바 스크립트 (ES6), 131 바이트

정확한 결과를 쌍 로 반환하는 훨씬 긴 솔루션입니다 .[numerator,denominator]

f=(n,a=[],p=x=1)=>n?f(n-1,[...a,q=++x*-~x],p*q/(g=(a,b)=>a?g(b%a,a):b)(p,q)):[...Array(p)].map((_,k)=>n+=a.some(d=>-~k%d<1))&&[n,p]

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



이것은 이론적 으로 82 바이트 에서 작동 합니다.
Shaggy

@ Shaggy 나는 그 대답에 대한 합의가 무엇인지 정말로 모른다. 이론적으로 는 작동하지만 실제로는 어떤 입력에도 작동하지 않습니다. (저는 개인적으로 이런 종류의 답변을 싫어합니다. 이런 이유로 저는 일반적으로 "작품 만 작동합니다. TIO에서 n = 1 인 경우 " ... 또는 현재의 경우 전혀 작동하지 않습니다.)
Arnauld

개인적으로, 나는 무한한 시간과 기억에 대한 합의의 큰 팬입니다.)
Shaggy

나도 좋아. :) 나의 유일한 예약은 적어도 두 개의 별개의 입력에 대한 답을 테스트하는 것이 가능해야한다고 생각합니다.
Arnauld


2

, 26 바이트

FN⊞υ×⁺²ι⁺³ιI∕LΦΠυ¬⌊Eυ﹪ιλΠυ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 절망적으로 비효율적이므로 (O (n! ²)) n=4TIO 에서만 작동합니다 . 설명:

FN⊞υ×⁺²ι⁺³ι

주변 요인 n의 첫 번째 n곱을 입력 하고 계산합니다 .

I∕LΦΠυ¬⌊Eυ﹪ιλΠυ

이러한 모든 요인의 곱을 취하여 해당 요인 중 하나 이상을 가진 숫자의 비율을 계산하는 데 사용하십시오.

30 바이트 이하의 느린 버전은 O (n!)에 불과하므로 n=6TIO에서 수행 할 수 있습니다 .

F⊕N⊞υ⁺²ιI∕LΦΠυΣEυ∧μ¬﹪ι×λ§υ⊖μΠυ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다.

46 바이트 더 빠른 버전은 O (lcm (1..n + 2))이므로 n=10TIO에서 수행 할 수 있습니다 .

FN⊞υ×⁺²ι⁺³ι≔⁰η≔⁰ζW∨¬η⌈Eυ﹪ηκ«≦⊕η≧⁺⌈Eυ¬﹪ηκζ»I∕ζη

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다.

45 바이트 빠른 버전은 O (2ⁿ)에 불과하므로 n=13TIO에서 수행 할 수 있습니다 .

⊞υ±¹FEN×⁺²ι⁺³ιF⮌υ⊞υ±÷×ικ⌈Φ⊕ι∧λ¬∨﹪ιλ﹪κλIΣ∕¹✂υ¹

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다.

54 바이트 빠른 버전은보다 효율적인 LCM을 사용하므로 n=18TIO에서 최대 성능을 발휘할 수 있습니다 .

⊞υ±¹FEN×⁺²ι⁺³ιFEυ⟦κι⟧«W⊟κ⊞⊞Oκλ﹪§κ±²λ⊞υ±÷Π…κ²⊟κ»IΣ∕¹✂υ¹

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다.


2

Wolfram Language (Mathematica) , 69 68 61 52 바이트

Count[Range[#!],b_/;Or@@(# #-#&@Range[3,#]∣b)]/#!&

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

3- 색인. 처음에 나는 사용하려고 했지만 그것이 더 짧을 것이라는 LCM@@것을 깨달았습니다 #!...하지만 지금은 많은 메모리가 있습니다 Range[#!]...

조건을 2 바이트로 골프 다운 처리했습니다.


이전 수치 솔루션 (56 바이트) :

N@Count[Range[5^8],b_/;Or@@Array[(# #-#)∣b&,#,3]]/5^8&

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

2- 색인. #!>5^8( #>9, #정수 라고 가정 할 때) 더 효율적 입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.