इस समस्या में, हमें एक संख्या संख्या दी जाती है। हमारा कार्य पता लगाना है कि दी गई संख्या प्रथम n प्राकृत संख्याओं का योग है या नहीं।
समस्या का विवरण: यहां, हमें यह जांचना होगा कि दी गई संख्या पहली n प्राकृतिक संख्याओं का योग है या नहीं।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: संख्या =55
आउटपुट: हाँ, 10
स्पष्टीकरण:
55 पहली 10 प्राकृतिक संख्याओं का योग है, 1+2+3+4+5+6+7+8+9+10.
समाधान दृष्टिकोण:
समस्या को हल करने का एक सरल तरीका है n प्राकृत संख्याओं का योग तब तक ज्ञात करना जब तक कि वह संख्या के बराबर या उससे अधिक न हो जाए।
यदि योग संख्या के बराबर है, तो 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
यह विधि अच्छी है लेकिन हम n प्राकृत संख्याओं के योग के लिए गणितीय सूत्र का उपयोग करके समस्या को अधिक कुशलता से हल कर सकते हैं।
प्रथम पारस्परिक संख्याओं का योग सूत्र द्वारा दिया जाता है,
योग =n*(n+1)/2
हमें योग दिया गया है और हमें n का मान ज्ञात करना है,
इसलिए हमें n खोजने के लिए एक द्विघात समीकरण बनाना होगा।
=> 2*योग =n 2 + एन
=> n 2 + n - 2*योग =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