궁금한 소수 분수 공식


17

양의 정수 n이 주어지면 정수 ab ( 감소 분수 a / b를 형성) 는 다음 과 같이 출력됩니다 .

Formula a/b = product of k=1 to n: (p_k^2 - 1) / (p_k^2 + 1)

여기서 p kk 번째 소수입니다 (p 1 = 2 사용).

예 :

1   -> 3, 5
2   -> 12, 25
3   -> 144, 325
4   -> 3456, 8125
5   -> 41472, 99125
15  -> 4506715396450638759507001344, 11179755611058498955501765625
420 -> very long

확률 프라임 검사가 허용되며 언어의 정수 유형 제한으로 인해 답변이 실패해도 괜찮습니다.


바이트 단위의 최단 코드가 이깁니다.


3.0대신에 출력 할 수 있습니까 3?
Adnan

2
@AandN 같아요 ... 프로그램이 모든 입력에 대해 올바른지 확인 하고 큰 입력에 대해 부동 소수점 오류가 발생하지 않도록하십시오.
orlp

우리는 출력 수 ab합리적인 유형으로?
Alex A.

2
@AlexA. 출력에 두 정수가 모두 명확하게 표시되는 경우에만.
orlp

1
@SamYonnou 이것들은 이미 존재하지만 , 문제를 사소하게하기 위해 네이티브 숫자 유형을 남용하는 것은 기본적으로 금지되는 허점 중 하나입니다.
Dennis

답변:


6

M , 9 바이트

RÆN²‘İḤCP

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

하찮은 일

M을 만나보세요!

M은 수학 과제를 겨냥한 젤리 포크입니다. Jelly와 M의 핵심 차이점은 M은 모든 내부 계산에 무한 정밀도를 사용하여 결과를 상징적으로 나타냅니다. 일단 M이 성숙 해지면 젤리는 점차 다목적이되고 수학 중심적이지 않게됩니다.

M은 (버그의 전체, 그리고 정말 진행 대단히 작품 다른 젤리에서 지금을),하지만이 문제에 대한 매력처럼 작동하고 난 그냥 저항 할 수 없었다.

작동 원리

RÆN²‘İḤCP  Main link. Argument: n

R          Range; yield [1, ..., n].
 ÆN        Compute the kth primes for each k in that range.
   ²‘      Square and increment each prime p.
     İ     Invert; turn p² + 1 into the fraction 1 / (p² + 1).
      Ḥ    Double; yield 2 / (p² + 1).
       C   Complement; yield 1 - 2 / (p² + 1).
        P  Product; multiply all generated differences.

ÆN유일한 M-특정 연산자는? 또한 Melly
CalculatorFeline

이러한 연산자는 M에만 해당되지 않습니다. 차이점은 M은 분수를 계산하고 Jelly는 부동 소수점 숫자를 계산한다는 것입니다.
Dennis

9

수학, 32 바이트

1##&@@(1-2/(Prime@Range@#^2+1))&

정수 입력을 받고 실제 분수를 반환하는 명명되지 않은 함수입니다.

이것은 사실을 사용합니다 . Mathematica가 목록에 대한 모든 기본 산술을 스레드한다는 사실 덕분에 코드가 골프화되었습니다. 먼저 list 를 만든 다음 모든 소수를 검색하고 해당 목록을 위의 표현식에 연결하십시오. 이것은 우리에게 모든 요소의 목록을 제공합니다. 마지막으로 목록 에 적용 하여 모든 것을 곱 합니다 .(p2-1)/(p2+1) = 1-2/(p2+1){1, 2, ..., n}Times1##&

또는 Array동일한 바이트 수로 사용할 수 있습니다 .

1##&@@(1-2/(Prime~Array~#^2+1))&

1-2= 1, 맞습니까?
CalculatorFeline

@CatsAreFluffy 그래 ( -1실제로),하지만 1-2/x ≠ -1/x. ;)
Martin Ender

@Range@±~Array~
CalculatorFeline

6

파이썬 2, 106 바이트

from fractions import*
n=input()
F=k=P=1
while n:b=P%k>0;n-=b;F*=1-Fraction(2*b,k*k+1);P*=k*k;k+=1
print F

첫 번째와 네 번째 라인 너무 ... 그냥 사용하는 것이 밝혀졌다 상처를 Fraction더 나은 별도의 증식 사용하는 것보다했다 gcd경우에도 파이썬 3.5에서, gcd상주에서 math.

윌슨의 정리를 사용하는 @ xnor 's answer here 에서 채택 된 주요 세대 .


5

루비, 122 77 65 바이트

10 바이트를 줄여준 Sherlock에게 감사합니다.

require'prime'
->n{Prime.take(n).map{|x|1-2r/(x*x+1)}.reduce(:*)}

숫자를 가져와 a를 반환하는 익명 함수를 정의합니다 Rational.


4

PARI / GP , 33 바이트

n->prod(i=1,n,1-2/(prime(i)^2+1))

대체 버전 (46 바이트) :

n->t=1;forprime(p=2,prime(n),t*=1-2/(p^2+1));t

부동 소수점 ( t_REAL) 결과 (38 바이트)를 제공하는 비경쟁 버전 :

n->prodeuler(p=2,prime(n),1-2/(p^2+1))


4

피스, 26 25

/RiFN=N*MCm,tdhd^R2.fP_ZQ

여기에서 시도 하거나 Test Suite를 실행하십시오 .

Jakube 덕분에 1 바이트가 절약되었습니다!

사양의 순진한 구현. P<neg>음수의 양수 값이 소수인지 아닌지를 반환 하는 spiffy "new"(이것이 언제 추가 되었는지는 몰랐지만 결코 본 적이 없습니다) 를 사용합니다. 일부 매핑 등은 아마도 골프를 칠 수 있습니다 ...


3

줄리아, 59 42 바이트

n->prod(1-big(2).//-~primes(2n^2)[1:n].^2)

이것은 정수를 받아들이고 분자와 분모 RationalBigInt가진를 반환하는 익명 함수입니다 .

2 n 2 미만의 소수 목록을 생성 하고 첫 번째 n 요소를 선택하여 시작합니다 . 이것은 n 번째 소수가 모든 n > 1에 대해 항상 n 2 미만 이기 때문에 작동합니다 ( 여기 참조 ).

선택한 n 소수 의 각 p 에 대해 요소 별 거듭 제곱 ( )을 사용하여 p 를 제곱 하고 합리적인 2 / ( p + 1)을 구성합니다. 여기서 2는 먼저 충분한 정밀도를 보장하기 위해 a 로 변환됩니다 . 우리는 이것을 1에서 빼고, 합리적 결과 배열의 곱을 가져 와서 합리적 결과를 반환합니다..^2BigInt

사용법 예 :

julia> f = n->prod(1-big(2).//-~primes(2n^2)[1:n].^2)
(anonymous function)

julia> f(15)
4506715396450638759507001344//11179755611058498955501765625

Sp3000 덕분에 17을 절약했습니다!


2

볼록, 28 바이트

Convex는 CJam과 Golfscript를 기반으로 개발중인 새로운 언어입니다. 인터프리터와 IDE는 여기 에서 찾을 수 있습니다 . 입력은 명령 행 인수에 대한 정수입니다. 인덱스는 1부터 시작합니다. CP-1252 인코딩을 사용합니다.

,:)_{µ²1-}%×\{µ²1+}%×¶_:Ðf/p

이 프로그램이 챌린지가 게시되기 전에 사용하는 몇 가지 기능을 작업하고 있었기 때문에이 답변이 경쟁중인 것으로 간주 할 수도 있고 그렇지 않을 수도 있습니다.


2

MATL , 18 바이트

:Yq2^tqpwQpZd1Mhw/

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

2^52내부의 정수만 정확하게 표현할 수 있으므로 큰 입력에 실패합니다 .

설명

:     % implicitly take input n. Generate range [1,...,n]
Yq    % first n prime numbers
2^    % square
tqp   % duplicate. Subtract 1. Product
wQp   % swap. Add 1. Product
Zd    % gcd of both products
1M    % push the two products again
h     % concatenate horizontally
w/    % swap. Divide by previously computed gcd. Implicitly display

2

Mathematica, 45 바이트

Times@@Array[(Prime@#^2-1)/(Prime@#^2+1)&,#]&

프라임? 분수? 수학.


1

하스켈, 53 바이트

익명 함수, 53 자 :

(scanl(*)1[1-2%(p*p+1)|p<-nubBy(((>1).).gcd)[2..]]!!)

여기에서 보십시오 (참고 : 표준 GHCi에서 먼저 확인 Data.Ratio하고 Data.List가져와야 함).

λ (scanl(*)1[1-2%(p*p+1)|p<-nubBy(((>1).).gcd)[2..]]!!) 5
41472 % 99125
:: Integral a => Ratio a

Haskell의 목록 색인 !!은 0을 기준으로합니다. 익명의 함수를 구성 (___!!)하는 연산자 섹션 입니다 (xs !!) n == xs !! n.

전체 시퀀스를 생성하는 데 4 바이트가 더 적습니다.

λ mapM_ print $ take 10 $     -- just for a nicer output
    scanl(*)1[1-2%(n*n+1)|n<-[2..],all((>0).rem n)[2..n-1]]
1 % 1
3 % 5
12 % 25
144 % 325
3456 % 8125
41472 % 99125
3483648 % 8425625
501645312 % 1221715625
18059231232 % 44226105625
4767637045248 % 11719917990625
:: IO ()

0

진심으로, 25 바이트

,r`PªD;⌐k`M┬`π`Mi│g;)@\)\

출력 a\nb( \n개행)입니다. 프라임 생성이 상당히 느리기 때문에 큰 입력은 시간이 오래 걸리고 메모리가 부족하여 실패 할 수 있습니다.

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

설명:

,r`PªD;⌐k`M┬`π`Mi│g;)@\)\
,r                         push range(input)
  `PªD;⌐k`M                map:
   P                         k'th prime
    ª                        square
     D                       decrement
      ;                      dupe
       ⌐                     add 2 (results in P_k + 1)
        k                    push to list
           ┬               transpose
            `π`M           map product
                i│         flatten, duplicate stack
                  g;)      push two copies of gcd, move one to bottom of stack
                     @\    reduce denominator
                       )\  reduce numerator

제목이 재미있어 보인다. "진심으로 25 바이트?!"
cdt

@AlexKChen이 언어를 만든 지 거의 2 년이 지났고 이제는 보수를 받았습니다 :)
Mego
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.