इस समस्या में, हमें एक पूर्णांक मान N दिया जाता है। हमारा कार्य श्रृंखला 1 + 22 + 333 + 4444 + 55555... n पदों तक का योग ज्ञात करना है ।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input : N = 4 Output : 4800
स्पष्टीकरण -
1 + 22 + 333 + 4444 = 4800
समाधान दृष्टिकोण
समस्या को हल करने का एक सरल तरीका है श्रृंखला का सामान्य पद ज्ञात करना और फिर n पदों तक का योग ज्ञात करना। और सूत्र का उपयोग करके योग की गणना करने से समय कम होकर O(1) हो जाएगा।
श्रृंखला है,
1 + 22 + 333 + 4444 + 55555...
श्रृंखला का योग इस प्रकार लिखा जा सकता है,
$\mathrm{Sum}\:=\:1^*(\frac{10^1-1}{9})\:+\:2^*(\frac{10^1-1}{9}) \:+\:3^*(\frac{10^1-1}{9})\dotsm$
1/9 सामान्य लेने पर योग बन जाता है,
$\mathrm{Sum}\:=\:1/9^*\lbrace(1^*10^1-1)\:+\:(2^*10^2-1)\:+\:(3 ^*10^3-1)\:+\:\dotsm(n^*10^1-n)\rbrace$
$\mathrm{Sum}\:=\:1/9^{*}\lbrace1^*10^1\:+\:2^*10^2\:+\:3^*10^3\:+ \:\dotsm+n^*10^n\:-\:(1+2+3+\dotsm\:n)\rbrace$
$\mathrm{Sum}\:=\:1/9^{*}\lbrace(1^*10^1\:+\:2^*10^2\:+\:3^*10^3\ :+\:\dotsm+n^*10^n)\:-\:1/2(n^*(n+1))\rbrace$
शब्द (1*10 1 + 2*10 2 + 3*10 3 + ... + n * 10 n ) श्रृंखला के सामान्य सूत्र में अंतर करके हल किया जा सकता है,
1 + x + x 2 + x 3 + ... n * x n
तो, शर्तें (1 * 10 1 + 2 * 10 2 + 3 * 10 3 + ... + n * 10 n ) के रूप में फिर से लिखा जा सकता है,
$\frac{n^*(10^{n+2})-(n+1)*(10^{n+1})+10}{81}$
योग सूत्र में वापस लाना,
$\mathrm{Sum}\:=\:1/9^*\lbrace(\frac{n^*(10^{n+2})-(n+1)*(10^{n+1}) +10)}{81}\:-\:1/2(n^*(n+1))\rbrace$
$\mathrm{Sum}\:=\:\frac{1}{1458}*\lbrace2^*(n*(10^{n+2})-(n+1)*(10^{n+1 })+10)-81^*n^*(n+1)\rbrace$
$\mathrm{Sum}\:=\:\frac{1}{1458}*\lbrace2^*(n*(10^{n+2})-(n+1)*(10^{n+1 })+10)-81^*n^*(n+1)\rbrace$
$\mathrm{Sum}\:=\:\frac{1}{1458}*\lbrace(n^*(2^*10^{n+1}-2^*10^{n+1})- 2^*10^{n+1})\:+\:20\:-\:81^*n^2-81n\rbrace$
$\mathrm{Sum}\:=\:\frac{1}{1458}*\lbrace10^{n+1*}(20n-2n-2)-81n^2-81n+20\rbrace$
$\mathrm{Sum}\:=\:\frac{1}{1458}*\lbrace10^{n+1*}(18n-2)-81n^2-81n+20\rbrace$
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include<iostream> #include<math.h> using namespace std; int calcSumNTerms(int n) { return ( ( (18*n - 2)*(pow(10, n+1)) - 81*n*n - 81*n + 20 )/1458 ); } int main() { int n = 5; cout<<"The sum of series upto n terms is "<<calcSumNTerms(n); return 0; }
आउटपुट
The sum of series upto n terms is 60355