এই সমস্যায়, আমাদের একটি পূর্ণসংখ্যার মান দেওয়া হয়েছে। আমাদের কাজ হল সিরিজ 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