वर्गमूल के निरंतर अंशों का निर्धारण


13

निरंतर अंश एक नंबर के nनिम्न प्रपत्र का एक अंश है:


जो करने के लिए और converges n

aएक निरंतर अंश में अनुक्रम आमतौर पर इस प्रकार लिखा जाता है: [ ; एक 1 , एक 2 , एक 3 , ... एक एन ]।
हम अपने फैशन को उसी तरीके से लिखेंगे, लेकिन अर्धविराम के बीच दोहराव वाले हिस्से के साथ।

आपका लक्ष्य वर्गमूल के निरंतर अंश को वापस करना है n
इनपुट: एक पूर्णांक, nnएक आदर्श वर्ग कभी नहीं होगा।
आउटपुट: का निरंतर अंश sqrt(n)

परीक्षण के मामलों:
2 -> [1; 2;]
3 -> [1; 1, 2;]
19 -> [4; 2, 1, 3, 1, 2, 8;]

सबसे छोटा कोड जीतता है। सौभाग्य!


1
क्या आउटपुट को परीक्षण मामलों के समान प्रारूप में होना चाहिए?
grc

नहीं, जब तक आपके पास अर्धविराम है, यह ठीक है।
beary605

हम्म, सही जवाब मिल रहा है, यह जानने में परेशानी हो रही है कि अंश को रोकना तर्कसंगत है। क्या यह वास्तव में उतना ही सरल है, जब एक <उप> 0 </ उप> मूल इनपुट के sqrt से दोगुना है?
जोफिश

हां, यह सीमा है।
beary605

@ beary605 धन्यवाद बहुत अधिक पढ़ रहा है, और अब मैं देखता हूं कि एक वर्गमूल का निरंतर अंश एक विशेष मामला है। आकर्षक सामान! अभी भी एक गैर-अस्थायी बिंदु संस्करण पर काम कर रहा है।
जोश

जवाबों:


3

गोल्फस्क्रिप्ट ( 66 60 वर्ण)

~:^,{.*^>}?(:?';'[1?{^1$.*-@/?@+.2$/@@1$%?\- 1$(}do;;]','*1$

चेतावनी: अधिकांश ?वहाँ floor(sqrt(input))बिल्ट के बजाय चर का प्रतिनिधित्व कर रहे हैं । लेकिन पहले वाला बिलिन है।

स्टड पर इनपुट लेता है और स्टडआउट को आउटपुट देता है।

एल्गोरिथ्म का प्यूसोकोड (वर्तमान में पाठक के लिए एक अभ्यास के रूप में छोड़ दिया गया सबूत का प्रमाण):

n := input()
m := floor(sqrt(n))
output(m)
x := 1
y := m
do
  x := (n - y * y) / x
  output((m + y) / x)
  y := m - (m + y) % x
while (x > 1)

फिर भी मैं फिर से खुद को एक एकल ऑपरेटर की तलाश करता हूं जो a bस्टैक पर ले जाता है और स्टैक a/b a%bपर छोड़ देता है ।


1
मैं कहता हूँ चाहते हैं कि मैं वास्तव में जी एस सीखने की जरूरत है ... लेकिन जरूरत थोड़ा भी मजबूत एक शब्द यहाँ है;)
boothby

1
@boothby, पागल मत बनो। आपका जीवन जीएस के बिना पूरा नहीं होगा;)
पीटर टेलर

3

पायथन, 95 97 (लेकिन सही ...)

यह केवल पूर्णांक अंकगणित और फर्श विभाजन का उपयोग करता है। यह सभी सकारात्मक पूर्णांक इनपुट के लिए सही परिणाम देगा, हालांकि यदि कोई लंबे समय तक उपयोग करना चाहता है, तो उन्हें एक चरित्र जोड़ना होगा; उदाहरण के लिए m=a=0L। और निश्चित रूप से ... मेरे गरीब आदमी की मंजिल sqrt को समाप्त करने के लिए एक लाख साल तक प्रतीक्षा करें।

z=x=m=1
while n>m*m:m+=1
m=y=m-1
l=()
while-z<x:x=(n-y*y)/x;y+=m;l+=y/x,;y=m-y%x;z=-1
print c,l

आउटपुट:

n=139
11 (1, 3, 1, 3, 7, 1, 1, 2, 11, 2, 1, 1, 7, 3, 1, 3, 1, 22)

संपादित करें: अब पीटर टेलर के एल्गोरिथ्म का उपयोग करना। यह do...whileमजेदार था।


का उद्देश्य क्या है *(c*c-n)?
पीटर टेलर

@PeterTaylor, मैंने चुनौती को ध्यान से नहीं पढ़ा था, और एकदम सही वर्गों के लिए कोड का काम किया।
बूथ

2

पायथन, 87 82 80

x=r=input()**.5
while x<=r:print"%d"%x+",;"[x==r],;x=1/(x%1)
print`int(r)*2`+";"

यह एक पूर्णांक लेता है और आउटपुट देता है जैसे:

4; 2, 1, 3, 1, 2, 8;

x-int(x) -> x%1। मैं प्रभावित हूं :)
beary605

के अनुसार √139 के लिए गलत परिणाम देता है Wolfram Alpha
breadbox

मैंने इसे 9139 के लिए काम करने के लिए अद्यतन किया है। हालांकि, यदि अनुक्रम की लंबाई अधिक लंबी हो जाती है (has139 में 18 संख्याओं का अनुक्रम होता है), तो परिणाम संभवतः सटीकता खोना शुरू कर देगा।
grc

मुझे यह अविश्वसनीय रूप से दिलचस्प लगता है कि यह हमेशा 2 * int (sqrt (a)) में समाप्त होता है।
beary605

आगे दिलचस्प यह है कि अब हम में से 3 ने 139 के लिए कोड को तोड़ दिया है (मेरा अभी भी अन-गोल्फ और अन-पोस्टेड है)।
जोफिश

2

गणितज्ञ ३३ ३१

c[n_]:=ContinuedFraction@Sqrt@n

आउटपुट सूची प्रारूप में है, जो गणितज्ञ के लिए अधिक उपयुक्त है। उदाहरण:

c[2]
c[3]
c[19]
c[139]
c[1999]

(* out *)
{1, {2}}
{1, {1, 2}}
{4, {2, 1, 3, 1, 2, 8}}
{11, {1, 3, 1, 3, 7, 1, 1, 2, 11, 2, 1, 1, 7, 3, 1, 3, 1, 22}}
{44, {1, 2, 2, 4, 1, 1, 5, 1, 5, 8, 1, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 
  1, 14, 3, 1, 1, 29, 4, 4, 2, 5, 1, 1, 17, 2, 1, 12, 9, 1, 5, 1, 43, 
  1, 5, 1, 9, 12, 1, 2, 17, 1, 1, 5, 2, 4, 4, 29, 1, 1, 3, 14, 1, 1, 
  1, 1, 1, 1, 1, 2, 1, 2, 3, 1, 8, 5, 1, 5, 1, 1, 4, 2, 2, 1, 88}}

1
अरे यार, मुझे इस जवाब की पूरी उम्मीद थी। मैं इसे एक वास्तविक उत्तर के रूप में नहीं मानूंगा, जब तक कि आप निरंतर अंश को स्वयं उत्पन्न न करें।
beary605

@ beary605 मेला काफी
डेविड

2
+1 बेहतर अभी तक (25 वर्ण)ContinuedFraction@Sqrt@#&
डॉ। बेलिसरियस

क्या आप यहाँ गिनती कर रहे हैं? क्या यह एक कार्यक्रम है जो स्टड से इनपुट लेता है? क्योंकि जिस तरह से आप इसका उपयोग करते हैं, ऐसा लगता है कि यह फ़ंक्शन परिभाषा के बिना एक फ़ंक्शन बॉडी है।
पीटर टेलर

@Peter टेलर कृपया संशोधन देखें।
डेविड जेसी

1

पायथन ( 136 133 96)

निरंतर अंशों के लिए मानक विधि, अत्यंत गोल्फ।

a=input()**.5
D=c=int(a);b=[]
while c!=D*2:a=1/(a%1);c=int(a);b+=[c]
print D,";%s;"%str(b)[1:-1]

आप उपयोग करके कुछ वर्णों को बचा सकते हैं while 1:। आप लूप में अधिकांश स्टेटमेंट को एक ही लाइन पर रख सकते हैं।
grc

जब मैं आपकी स्क्रिप्ट चलाता हूं, तो मुझे 8 ;1;74 और 75 के लिए आउटपुट मिलता है ; यह सही नहीं लगता। यह 76 पर लटका हुआ है।
ब्रेडबॉक्स

^ ^ हां। मेरा कोड तय किया।
beary605

यह संस्करण 139 के लिए गलत परिणाम देता है।
ब्रेडबॉक्स

@boothby फिर मैं उसे हटा दूंगा और हम इसे ड्रॉ कहेंगे :)
ज्योफिश

1

सी, 137

न्यूलाइन को शामिल करते हुए, मुझे लगता है कि मुझे अपने वर्गमूल को रोल करने की ज़रूरत नहीं है।

#include<math.h>
main(i,e){double d;scanf("%lf",&d);e=i=d=sqrt(d);while(i^e*2)printf("%d%c",i,e^i?44:59),i=d=1.0/(d-i);printf("%d;",i);}

यह sqrt (139) के लिए टूट जाता है और आउटपुट में कभी-कभी अतिरिक्त अर्धविराम समाहित करता है, लेकिन मैं आज रात इस पर काम करने के लिए बहुत थक गया हूं :)

5
2, 4,
19
4; 2,1,3,1,2,8;
111
10; 1,1,6,1,1,20;

1

पर्ल, 99 वर्ण

करता नहीं 139, 151, आदि 1 से 9 अंक लेकर संख्या के साथ परीक्षण किया गया पर पेंच।

$"=",";$%=1;$==$-=($n=<>)**.5;
push@f,$==(($s=$=*$%-$s)+$-)/($%=($n-$s*$s)/$%)until$=>$-;
say"$-;@f;"

ध्यान दें: $%, $=, और $-सभी पूर्णांक के लिए मजबूर कर चर हैं।


1

एपीएल (एनएआरएस), 111 चार्ट, 222 बाइट्स

r←f w;A;a;P;Q;m
m←⎕ct⋄Q←1⋄⎕ct←P←0⋄r←,a←A←⌊√w⋄→Z×⍳w=0
L: →Z×⍳0=Q←Q÷⍨w-P×P←P-⍨a×Q⋄r←r,a←⌊Q÷⍨A+P⋄→L×⍳Q>1
Z: ⎕ct←m

F फ़ंक्शन, Pell समीकरण को हल करने के लिए पृष्ठ http://mathworld.wolfram.com/PellEquation.html में पाए गए एल्गो पर आधारित है। उस f फंक्शन में उसका इनपुट सभी नेगेटिव नंबर (टाइप भिन्न भी) होता है। संभव है कि कुछ गड़बड़ है, मुझे याद है कि, में है, मैं इसे कैसे देखता हूं, बड़े अंशों के लिए समस्या, जैसा कि

  √13999999999999999999999999999999999999999999999x
1.183215957E23 

इसलिए एक कार्य चक्र () होगा। इस कारण से अंश इनपुट (और पूर्णांक इनपुट) को <10 ^ 15 होना चाहिए। परीक्षा:

 ⎕fmt (0..8),¨⊂¨f¨0..8
┌9───────────────────────────────────────────────────────────────────────────────────────────────────────┐
│┌2─────┐ ┌2─────┐ ┌2───────┐ ┌2─────────┐ ┌2─────┐ ┌2───────┐ ┌2─────────┐ ┌2─────────────┐ ┌2─────────┐│
││  ┌1─┐│ │  ┌1─┐│ │  ┌2───┐│ │  ┌3─────┐│ │  ┌1─┐│ │  ┌2───┐│ │  ┌3─────┐│ │  ┌5─────────┐│ │  ┌3─────┐││
││0 │ 0││ │1 │ 1││ │2 │ 1 2││ │3 │ 1 1 2││ │4 │ 2││ │5 │ 2 4││ │6 │ 2 2 4││ │7 │ 2 1 1 1 4││ │8 │ 2 1 4│││
││~ └~─┘2 │~ └~─┘2 │~ └~───┘2 │~ └~─────┘2 │~ └~─┘2 │~ └~───┘2 │~ └~─────┘2 │~ └~─────────┘2 │~ └~─────┘2│
│└∊─────┘ └∊─────┘ └∊───────┘ └∊─────────┘ └∊─────┘ └∊───────┘ └∊─────────┘ └∊─────────────┘ └∊─────────┘3
└∊───────────────────────────────────────────────────────────────────────────────────────────────────────┘
  f 19
4 2 1 3 1 2 8 
  f 54321x
233 14 1 1 3 2 1 2 1 1 1 1 3 4 6 6 1 1 2 7 1 13 4 11 8 11 4 13 1 7 2 1 1 6 6 4 3 1 1 1 1 2 1 2 3 1 1 14 466 
  f 139
11 1 3 1 3 7 1 1 2 11 2 1 1 7 3 1 3 1 22 
  +∘÷/f 139
11.78982612
  √139
11.78982612

यदि तर्क एक संख्या का वर्ग है, तो यह केवल 1 तत्व की एक सूची लौटाएगा, उस संख्या का वर्ग

  f 4
2 

अगर यह मुझ पर निर्भर करेगा, तो "कोडगॉल्फ" के बिना एक अभ्यास में मैं पिछले संपादन को पसंद करूंगा जो फ़ंक्शन sqrti () का उपयोग करता है ...


1
निश्चित रूप से आप एकल-अक्षर नामों का उपयोग कर सकते हैं fqऔर इसके बजाय a0। यह भी: (a×Q)-P->P-⍨a×Q
ngn

Q←Q÷⍨- क्या नार्स सपोर्ट करता है Q÷⍨←?
ngn

@ngn: मैं कई असाइनमेंट फॉर्मूले की श्रृंखला में "Q ⍨ ← in" का उपयोग करना पसंद नहीं करता ... इस सहमति के लिए ... संभव मैं कहता हूं कि क्योंकि मैंने सी
अनडाइफाइड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.