इस समस्या में, हमें दो पूर्णांक m और n दिए गए हैं। हमारा कार्य पहले n प्राकृतिक संख्याओं का m-वां योग ढूंढना है।
समस्या विवरण: हम n प्राकृतिक संख्याओं के योग का योग m बार ढूंढेंगे। योग सूत्र द्वारा दिया जाता है,
यदि (m > 1),
sum(n, m) = sum( sum(n, (m-1)), 1 )
यदि (m = 1)
sum(n, m) = sum(n, 1) = n प्राकृतिक संख्याओं का योग
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: m = 4, n = 2
आउटपुट: 231
व्याख्या:
sum(2, 4) = sum ( sum(2, 3), 1 )
= sum ( sum ( sum (2, 2), 1) , 1 )
= sum ( sum ( sum (sum( 2, 1), 1) , 1 ), 1)
= sum ( sum ( sum (3, 1) , 1 ), 1)
= sum ( sum ( 6 , 1 ), 1)
= sum (21, 1)
= 231
समाधान दृष्टिकोण
समस्या का एक सरल समाधान दो नेस्टेड लूप का उपयोग करना है। बाहरी लूप m मानों के लिए होगा और आंतरिक लूप n मानों के लिए। हम n के मान को अपडेट करेंगे और n प्राकृतिक संख्याओं के योग की गणना m बार करेंगे।
एक अधिक प्रभावी दृष्टिकोण n प्राकृतिक संख्याओं के योग को m बार रिकर्सिवली कॉल करना होगा, हर बार पिछले योग के साथ मान को अपडेट करना।
एल्गोरिदम:
चरण 1: योग मान को sum = sum(n, m-1)* (sum(n, m-1)+1) / 2 से अपडेट करें यदि m का योग मान एक से अधिक है।
चरण 2: यदि m का मान = 1 है, तो sum = n * (n+1) /2 वापस करें।
चरण 3: sum वापस करें।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,
उदाहरण
#include <iostream>
using namespace std;
int calcSumN(int n, int m) {
if (m == 1)
return (n * (n + 1) / 2);
return (calcSumN(n, m-1) * (calcSumN(n, m-1) + 1) / 2);
}
int main() {
int n = 4;
int m = 6;
cout<<m<<"-th summation of first "<<n<<" natural numbers is "<<calcSumN(n, m);
return 0;
}
आउटपुट
6-th summation of first 4 natural numbers is 125230148