पेशेवर उपकरण

फिबोनाची अनुक्रम कैसे लिखें

फिबोनाची अनुक्रम कैसे लिखें
एक सकारात्मक पूर्णांक जेड एक फिबोनाची संख्या है यदि केवल 5z ^ 2 + 4 या 5z ^ 2 - 4 में से एक सही वर्ग है।

c++ - परीक्षण करें कि कोई संख्या फाइबोनैकी है

मुझे पता है कि फाइबोनैकी संख्याओं की सूची कैसे बनाएं, लेकिन मुझे नहीं पता कि अगर कोई दी गई संख्या फाइबोनैकी सूची से संबंधित है तो मैं कैसे परीक्षण कर सकता हूं - एक तरीका जो दिमाग में आता है वह फाइब की सूची उत्पन्न करता है। उस संख्या तक संख्याएं और देखें कि यह सरणी से संबंधित है, लेकिन एक और सरल, तेज और तेज विधि होनी चाहिए।

आप कितने नंबर से निपट रहे हैं?

क्या एक लुकअप टेबल आपके लिए काम कर सकती है? (उन नंबरों की एक प्रीकंप्यूटेड सूची जो आप खोज सकते हैं)

एक बंद-स्वरूप अभिव्यक्ति भी है जो मुझे लगता है कि आप विश्लेषणात्मक रूप से उत्तर प्राप्त करने के लिए उलटा हो सकता है (हालांकि मैं गणितज्ञ नहीं हूं, इसलिए मैं यह सुझाव नहीं दे सकता कि यह सुझाव समझ में आता है)

एक फाइबोनैकी संख्या के लिए सामान्य फिबोनाची अनुक्रम कैसे लिखें अभिव्यक्ति एफ (एन) = [[(1 + वर्ग (5)) / 2] सुपर एन + 1 - [(1-वर्ग (5)) / 2] सुपर एन + 1] / वर्ग (5) . (*) दूसरा घातीय बड़े एन के लिए शून्य पर जाता है और संख्यात्मक संचालन करता है जिसे हम एफ (एन) = [(1.618) सुपर एन + 1] / 2.236 प्राप्त करते हैं

यदि के परीक्षण की संख्या है लॉग (के * 2.2336) / लॉग (1.618) एक पूर्णांक होना चाहिए!

के बराबर 13 के फिबोनाची अनुक्रम कैसे लिखें लिए मेरे कैलकुलेटर का उत्तर 7.00246 के बराबर के लिए उत्तर देता है 14 उत्तर 7.1564 है।

आप परिणाम में आत्मविश्वास बढ़ा सकते हैं और जवाब में निकटतम पूर्णांक ले कर (*) में यह पुष्टि करने के लिए कि परिणाम के है

एक सकारात्मक पूर्णांक ω एक फाइबोनैकी संख्या है यदि केवल 5xx 2 + 4 और 5ω 2 - 4 में से एक सही वर्ग है।

एक स्कैला संस्करण-

चूंकि फाइबोनैकी संख्याएं तेजी से बढ़ती हैं, इसलिए आपके द्वारा सुझाई गई विधि बहुत तेज है। एक और यह है ।

जबकि कई लोग सही-स्क्वायर समाधान को इंगित करते हैं, इसमें फिबोनाची संख्या को स्क्वायर करना शामिल होता है, जिसके परिणामस्वरूप अक्सर बड़े पैमाने पर उत्पाद होता है।

80 से कम फाइबोनैकी संख्याएं हैं जिन्हें मानक 64-बिट पूर्णांक में भी रखा जा सकता है।

यहां मेरा समाधान है, जो परीक्षण किए जाने वाले नंबर से पूरी तरह से छोटा है।
(सी # में लिखा गया है, जिसमें मूल प्रकारों का उपयोग double और long । लेकिन एल्गोरिदम को बड़े प्रकार के लिए ठीक काम करना चाहिए।)

इस जवाब को लिखने के 4 साल बाद, एक टिप्पणीकार ने दूसरे पैरामीटर के बारे में पूछा, जो out ।

पैरामीटर # 2 फिबोनाची अनुक्रम फिबोनाची अनुक्रम कैसे लिखें में "इंडेक्स" है।
यदि मूल्य का परीक्षण किया जाना है, T एक फाइबोनैकी संख्या है, तो idx फिबोनैकी अनुक्रम में उस संख्या का 1-आधारित सूचकांक होगा। (एक उल्लेखनीय अपवाद के साथ)

फिबोनाची अनुक्रम 1 1 2 3 5 8 13 , आदि है।
3 अनुक्रम में चौथा नंबर है: IsFib(3, out idx); true और मूल्य 4 वापस आ जाएगा।
8 अनुक्रम में 6 वें नंबर है: IsFib(8, out idx); true और मूल्य 6 वापस आ जाएगा।
13 7 वां नंबर है; IsFib(13, out idx); true और मूल्य 7 वापस आ जाएगा।

एक अपवाद IsFib(1, out फिबोनाची अनुक्रम कैसे लिखें idx); , जो 2 वापस आ जाएगा, भले ही मान 1 सूचकांक 1 और 2 दोनों पर दिखाई देता है।

यदि IsFib एक गैर- IsFib संख्या पारित किया गया है, फिबोनाची अनुक्रम कैसे लिखें तो यह false वापसी करेगा, और IsFib का मूल्य T से कम सबसे बड़ी फाइबोनैकी संख्या का सूचकांक होगा।

16 एक फाइबोनैकी मूल्य नहीं है।
IsFib(16, out idx); false वापसी और मूल्य 7 ।
आप सूचकांक 7 को फिबोनाची मूल्य 13 में फिबोनाची अनुक्रम कैसे लिखें परिवर्तित करने के लिए बिनेट के फॉर्मूला का उपयोग कर सकते हैं, जो कि 16 से कम की सबसे बड़ी संख्या है।

जावा समाधान नीचे के रूप में किया जा सकता है। लेकिन फिर भी इसे अनुकूलित किया जा सकता है

निम्नलिखित समाधान के फिबोनाची अनुक्रम कैसे लिखें लिए काम करता है

टी परीक्षण मामलों में से कोई नहीं है, एन संख्या की सीमा है

पुन: अहमद का कोड - कोई रिकर्सन या प्वाइंटर्स के साथ एक सरल दृष्टिकोण, काफी मूर्खतापूर्ण है, लेकिन वास्तव में टाइटैनिक संख्याओं से कम किसी भी कम्प्यूटेशनल पावर के लिए आवश्यक नहीं है (एनटी फाइब संख्या को सत्यापित करने के लिए लगभग 2 एन अतिरिक्त, जो आधुनिक मशीन पर मिलीसेकंड लेगा खराब से खराब)

// रिटर्न पॉज़ अगर इसे कुछ भी मिल जाए, 0 अगर ऐसा नहीं होता है (सी / सी ++ किसी भी मूल्य का व्यवहार करता है! = 0 सत्य के रूप में, तो एक ही अंत परिणाम)

फिबोनाची संख्याओं के बारे में विकिपीडिया लेख पर "फिबोनाची संख्याओं को पहचानना" अनुभाग देखें।

मेरे और psmears के पहले उत्तरों के आधार पर, मैंने यह सी # कोड लिखा है।

यह धीरे-धीरे चरणों के माध्यम से चला जाता है, और यह स्पष्ट रूप से कम किया जा सकता है और अनुकूलित किया जा सकता है:

परीक्षण से पता चलता है कि यह पहली 69 फिबोनाची संख्याओं के लिए काम करता है, लेकिन 70 वें के लिए टूट जाता है।

कुल मिलाकर, जब तक कि आप किसी प्रकार की बिगइन्ट लाइब्रेरी का उपयोग नहीं फिबोनाची अनुक्रम कैसे लिखें कर रहे हैं, तो शायद फिबोनैकी संख्याओं की एक साधारण लुकअप टेबल होना बेहतर है और एल्गोरिदम चलाने के बजाए इसे जांचें।

पहले 300 नंबरों की एक सूची ऑनलाइन आसानी से उपलब्ध है।

लेकिन यह कोड एक व्यावहारिक एल्गोरिदम की रूपरेखा बनाता है, बशर्ते आपके पास पर्याप्त सटीकता हो, और अपने नंबर प्रतिनिधित्व प्रणाली को ओवरफ़्लो न करें।

मैंने सरल जोड़ों के साथ प्रस्तुत किए गए तरीकों पर कुछ बेंचमार्क चलाए, एक सरणी को पूर्व-कंप्यूटिंग किया, और परिणामों को हैश में याद किया। पर्ल के लिए, कम से कम, स्क्वायरिंग विधि लॉगरिदमिक विधि से थोड़ा तेज है, शायद 20% तेज है। जैसा कि एबलेन्की बताते हैं, यह एक ट्रेडऑफ है कि क्या आपको बिट नंबरों को स्क्वायर करने के लिए कमरा मिला है या नहीं।

निश्चित रूप से, सबसे तेज़ तरीका है कि आपके डोमेन स्पेस में सभी Fibonacci संख्या हैश। एबलेन्की बनाता है कि एक और बिंदु की रेखाओं के साथ, इन suckers में से केवल 94 हैं जो 2 ^ 64 से कम हैं।

आपको बस उन्हें पूर्व-गणना करना चाहिए, और उन्हें पर्ल हैश, पायथन शब्दकोश, या जो भी हो।

फाइबोनैकी संख्याओं के गुण बहुत दिलचस्प हैं, लेकिन यह निर्धारित करने के लिए कि कंप्यूटर प्रोग्राम में कुछ पूर्णांक एक प्रोग्राम है, हर बार पीआई की गणना करने के लिए एक सबराउटिन लिखना पसंद है।

यदि आपकी संख्याएं बाध्य आकार के हैं, तो ऊपरी बाउंड के नीचे सभी फाइबोनैकी संख्याओं को केवल हैशटेबल और परीक्षण रोकथाम में डालने से चाल चल जाएगी। बहुत कम फाइबोनैकी संख्याएं हैं (उदाहरण के लिए, 5mln से केवल 38), क्योंकि वे तेजी से बढ़ते हैं।

यदि आपकी संख्याएं बाध्य आकार के नहीं हैं, तो स्क्वायर परीक्षण के साथ सुझाई गई चाल लगभग निश्चित रूप से फाइबोनैकी अनुक्रम उत्पन्न करने से धीमी हो जाएगी जब तक कि संख्या पाई या पार न हो जाए।

यह मेरा समाधान है, मुझे यकीन नहीं है कि यह बेंचमार्क है या नहीं। आशा है कि ये आपकी मदद करेगा!

क्या ए, बी = बी, ए + बी कर रहा है

एक सकारात्मक पूर्णांक जेड एक फिबोनाची संख्या है यदि केवल 5z ^ 2 + 4 या 5z ^ 2 - 4 में से एक सही वर्ग है।

सकारात्मक पूर्णांक ω एक फाइबोनैकी संख्या है

अगर और केवल 5xx 2 + 4 और 5ω 2 - 4 में से एक सही वर्ग है

Alfred Posamentier और Ingmar Lehmann द्वारा (शानदार) FIBONACCI संख्याओं से

स्निपेट जो 1k और 10k बीच फिबोनाची संख्याओं को प्रिंट करता है।

ओएमजी केवल चार हैं .

समाधान के लिए, बिनेट के फॉर्मूला पर एक नज़र डालें।
(विकिपीडिया पर फिबोनाची संख्या के तहत "बंद फॉर्म अभिव्यक्ति" की तलाश करें)

यह कहता है कि फिबोनाची संख्या का अनुक्रम एक साधारण बंद सूत्र द्वारा बनाया गया है:

मेरा मानना ​​है कि यदि आप n लिए हल करते हैं, और परीक्षण करते हैं कि n पूर्णांक है, तो आपका जवाब होगा।

@psmears के रूप में संपादित करें , वही विकिपीडिया लेख में फिबोनाची संख्याओं का पता लगाने पर भी एक अनुभाग है। विकिपीडिया एक उत्कृष्ट स्रोत है।

एक बहुत अच्छा परीक्षण यह है कि एन एक फाइबोनैकी संख्या है और केवल अगर 5 N^2 + 4 या 5 N^2 + 4 5N^2 – 4 एक वर्ग संख्या है। विचारों के लिए कि कुशलतापूर्वक परीक्षण कैसे करें कि एक संख्या वर्ग एसओ चर्चा का संदर्भ है।

रेटिंग: 4.72
अधिकतम अंक: 5
न्यूनतम अंक: 1
मतदाताओं की संख्या: 523
उत्तर छोड़ दें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा| अपेक्षित स्थानों को रेखांकित कर दिया गया है *