मान लीजिए कि एन चरणों के साथ एक सीढ़ी का मामला है। कोई या तो कदम दर कदम आगे बढ़ सकता है, या हर कदम पर, कोई ज्यादा से ज्यादा N कदमों की छलांग लगा सकता है। हमें उन तरीकों की संख्या ज्ञात करनी है जिनसे हम शीर्ष मंजिल तक जा सकते हैं। N मान बड़ा हो सकता है हम केवल तरीकों की संख्या के पहले और अंतिम K अंकों में रुचि रखते हैं।
इसलिए, यदि इनपुट एन =10 के =2 की तरह है, तो आउटपुट 63 होगा क्योंकि 10 चरण हैं, यदि एस संख्या में हम शीर्ष पर जा सकते हैं, तो एस को फॉर्म के रूप में मानें wxyz .तो, wx + yz का योग 63 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एन:=एन -1
- c :=2 * (k + log(N);base10) की छत
- ई:=एन, बी:=2, एस:=1
- जबकि ई> 0, करें
- यदि ई विषम है, तो
- s :=(s*b) की पहली p-c अंक संख्या जहां p, s*b में अंकों की संख्या है
- e :=e/2 का तल
- b :=(b*b) की पहली p-c अंक संख्या जहां p, b*b में अंकों की संख्या है
- यदि ई विषम है, तो
- s :=s का पहला p - k अंक संख्या, जहां p, s में अंकों की संख्या है
- r :=s + (2^N) mod 10^k
- रिटर्न आर
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from math import log10,ceil def solve(N,k): N -= 1 c = 2*ceil(k + log10(N)) e = N b = 2 s = 1 while e > 0: if e % 2 == 1: s = int(str(s*b)[:c]) e //=2 b = int(str(b*b)[:c]) s = str(s)[:k] r = int(s) + pow(2, N, 10**k) return r N = 10 k = 2 print(solve(N,k))
इनपुट
10, 2
आउटपुट
63