विलोम स्पर्शरेखाओं के योग की स्पर्शरेखा ज्ञात कीजिए


16

पृष्ठभूमि

यह दिखाया जा सकता है कि किसी भी पूर्णांक के लिए k >= 0, f(k) = tan(atan(0) + atan(1) + atan(2) + ... + atan(k))एक परिमेय संख्या है।

लक्ष्य

एक पूरा कार्यक्रम या फ़ंक्शन लिखिए जो दिए जाने पर k >= 0, f(k)एकल घटाए गए अंश के रूप में आउटपुट (अंश और भाजक कोप्रेम होता है)।

परीक्षण के मामलों

पहले कुछ मान हैं

f(0) = (0,1)
f(1) = (1,1)
f(2) = (-3,1)
f(3) = (0,1)
f(4) = (4,1)
f(5) = (-9,19)
f(6) = (105,73)

नियम

  • मानक खामियों को मना किया जाता है।
  • इनपुट और आउटपुट किसी भी सुविधाजनक प्रारूप में हो सकते हैं। आप f(k)एक स्ट्रिंग numerator/denominatorके रूप में दो पूर्णांकों के एक अंश के रूप में आउटपुट कर सकते हैं, एक अंश या तर्कसंगत वस्तु, आदि। यदि आप एक स्ट्रिंग का उत्पादन करते हैं, तो दो पूर्णांकों को ही दें, अर्थात 3/2इसके बजाय आउटपुट 1 1/2
  • यह कोड-गोल्फ है, सबसे छोटा उत्तर (बाइट्स में) जीतता है।

1
क्या आप अपने परीक्षण मामलों में आगे बता सकते हैं कि इनपुट / आउटपुट मान क्या हैं?
इयान एच।

1
क्या डिग्री या रेडियन में पूर्णांक होते हैं?
6

1
OEIS: A180657
Sisyphus

4
atan(0)अवधि अनावश्यक है।
आदम

3
@ pizzapants184 f (0) = tan tan = tan 0 = ०
18

जवाबों:



11

गणितज्ञ, 28 बाइट्स

Fold[+##/(1-##)&,0,Range@#]&

इसे ऑनलाइन आज़माएं!

एक लंबा, लेकिन अधिक दिलचस्प दृष्टिकोण (32 बाइट्स):

Im@#/Re@#&@Product[1+n I,{n,#}]&

इसे ऑनलाइन आज़माएं!


+1 o'_'oगणितज्ञ और इसका अंतर्निहित इन्सo'_'o
मिस्टर एक्सकोडर

3
@ Mr.Xcoder वास्तव में इस मामले में नहीं। ओपी श्रृंखला योग का चतुराई से उपयोग कर रहा है (यदि मैं कोड को सही पढ़ता हूं)।
अदाम

11

पायथन 2 ,76 72 बाइट्स

from fractions import*
f=lambda k:Fraction(k and(k+f(k-1))/(1-k*f(k-1)))

पहचान का उपयोग करें:

tan(A + B) = (tan(A) + tan(B)) / (1 - tan(A) * tan(B))

हमारे पास है:

f(k) = 0                                    if k = 0
     = (k + f(k - 1)) / (1 - k * f(k - 1))  if k > 0

इसे ऑनलाइन आज़माएं!

लुइस मेंडो के लिए धन्यवाद, 4 बाइट्स बचाएं।


1
आशा है कि आप बुरा नहीं मानेंगे: मैंने एक TiO लिंक जोड़ा है।
श्री Xcoder

@LuisMendo LGTM, संपादित।
tsh

3

APL (Dyalog) , 14 बाइट्स

आवश्यक ⎕FR←1287( 128 बिट एफ loating सूत्री आर epresentation) छोटे निवेश के लिए। kसही तर्क के रूप में लेता है।

1(∧÷,)3○¯3+.○⍳

इसे ऑनलाइन आज़माएं!

 पूर्णांक एक के माध्यम से k(शून्य 0 के रूप में आवश्यक नहीं है)

¯3+.○ आर्कस स्पर्शरेखा का योग

3○ स्पर्शरेखा

1() निम्नलिखित तर्क कार्य को बाएं तर्क के साथ 1 और दाएं तर्क के रूप में ऊपर लागू करें:

 सबसे कम आम कई (1 और सही तर्क); अंश देता है

÷ द्वारा विभाजित

, समवर्ती (1 और सही तर्क का); अंश और हर देता है



2

जावास्क्रिप्ट (ईएस 6), 80 बाइट्स

f=n=>n?([a,b]=f(n-1),g=(a,b)=>a?g(b%a,a):b,c=g(d=b*n+a,e=b-n*a),[d/c,e/c]):[0,1]

एक [अंश, हर] जोड़ी लौटाता है। स्पष्टीकरण: f(n-1) = a/bतो चलो f(n) = atan(tan(n)+tan(a/b)) = (n+a/b)/(1-n*a/b) = (b*n+a)/(b-n*a)। यह तब अंश को अपनी न्यूनतम शर्तों तक कम करने के लिए रहता है।

ऑनलाइन ES6 पर्यावरण



1

05AB1E , 33 26 बाइट्स

0X)Iƒ©`N*+®`sN*-‚D¿D_i\¤}/

इसे ऑनलाइन आज़माएं!

व्याख्या

0X)                          # initialize stack with [0,1]
   Iƒ                        # for N in range [0 ... input] do:
     ©                       # store a copy of the current pair in the register
      `                      # push the pair separately to the stack
       N*                    # multiply the denominator with N
         +                   # add the numerator
          ®`s                # push the denominator then the numerator to the stack
             N*              # multiply the numerator by N
               -             # subtract it from the denominator
                D¿D          # get 2 copies of the greatest common divisor
                   0Qi  }    # if the gcd equals 0
                      \¤     # replace it with the denominator
                         /   # divide the pair with this number


1

कैसियो-बेसिक, 35 बाइट्स

tExpand(tan(sum(seq(tan⁻¹(n),n,0,k

टैन -1 को ट्रिग कीबोर्ड पर दर्ज किया जाना चाहिए; या -1 को abc> मठ कीबोर्ड से अलग से दर्ज किया जा सकता है। एफएक्स-सीपी 400 के मैनुअल के अनुसार, यह एक एकल दो-बाइट चरित्र (764) है।

फ़ंक्शन, कोड के लिए 34 बाइट्स, +1 बाइट को kएक तर्क के रूप में जोड़ने के लिए ।

व्याख्या

seq(tan-1(n),n,0,k)tan-1(n)0 से k के लिए सभी मान उत्पन्न करता है ।

sumउन सभी को एक साथ जोड़ता है, फिर tanउन पर स्पर्शरेखा कार्य करता है।

tExpand फिर उन्हें एक अंश में बदल देगा।


@ Adám यह Casio है, TI का नहीं, इसलिए यह उसी तरह से नहीं किया गया है।
numbermaniac

विकिपीडिया के अनुसार , और ¹प्रत्येक दो बाइट्स हैं;E5CCऔर E5C1
अड्म

@ एडम ओह अच्छा, मुझे महसूस नहीं हुआ कि लेख मौजूद था! हालाँकि, यह एक fx-CP400 है, न कि 9860G; मैंने सिर्फ मैनुअल की जांच की, और सुपरस्क्रिप्ट -1 वास्तव में एक एकल वर्ण है, कोड 764; तो यह एक एकल दो बाइट चरित्र है।
नंबरमानिक

0

जूलिया 0.6.0 40 बाइट्स

k->rationalize(tan(sum(x->atan(x),1:k)))

यह सवाल का सीधा कार्यान्वयन है। युक्तियुक्तकरण की सटीकता कभी-कभी अजीब हो सकती है लेकिन ठीक 99% समय काम करती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.