इस समस्या में, हमें एक संख्या num दी गई है। हमारा कार्य जांचना है कि दी गई संख्या पहले n प्राकृतिक संख्याओं का योग है या नहीं।
समस्या विवरण: यहां, हमें जांचना है कि दी गई संख्या पहले n प्राकृतिक संख्याओं का योग है या नहीं।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: num = 55
आउटपुट: yes, 10
व्याख्या:
55 पहले 10 प्राकृतिक संख्याओं का योग है, 1+2+3+4+5+6+7+8+9+10।
समाधान दृष्टिकोण:
समस्या को हल करने का एक सरल दृष्टिकोण n प्राकृतिक संख्याओं का योग तब तक ढूंढना है जब तक यह num के बराबर या अधिक न हो जाए।
यदि योग num के बराबर है, तो n वापस करें।
यदि n के किसी मान पर योग n से अधिक हो जाता है, तो -1 वापस करें।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,
उदाहरण
#include <iostream>
using namespace std;
int isNatSum(int num){
int sum = 0;
for (int n = 1; sum < num; n++) {
sum += n;
if (sum == num)
return n;
}
return -1;
}
int main(){
int num = 55;
int n = isNatSum(num);
if(n == -1)
cout<<"The value is not sum of natural numbers";
else
cout<<"The value is a sum of first "<<n<<" natural numbers";
return 0;
}
आउटपुट
The value is a sum of first 10 natural numbers
यह विधि अच्छी है लेकिन हम द्विघात समीकरण का उपयोग करके समस्या को अधिक कुशलता से हल कर सकते हैं।
पहली पारस्परिक संख्याओं का योग सूत्र द्वारा दिया जाता है,
sum = n*(n+1)/ 2
हमें योग दिया गया है और हमें n का मान ढूंढना है,
इसलिए हमें n ढूंढने के लिए एक द्विघात समीकरण बनाना होगा।
=> 2*Sum = n2 + n
=> n2 + n - 2*sum = 0, द्विघात समीकरण
इस द्विघात समीकरण का हल है,
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,
उदाहरण
#include <iostream>
#include <math.h>
using namespace std;
int isNatSum(int num){
int n = ( -1+ sqrt (1 + (8*num) ))/2;
if(ceil(n)==floor(n)){
return n;
}
return -1;
}
int main(){
int num = 55;
int n = isNatSum(num);
if(n == -1)
cout<<"The value is not sum of natural numbers";
else
cout<<"The value is a sum of first "<<n<<" natural numbers";
return 0;
}
आउटपुट
The value is a sum of first 10 natural numbers