इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य किसी संख्या की शिष्टता ज्ञात करना है।
विनम्र संख्या एक संख्या है जिसे दो या अधिक क्रमागत संख्याओं के योग के रूप में व्यक्त किया जा सकता है।
संख्या की विनम्रता संख्या को क्रमागत पूर्णांकों के योग के रूप में व्यक्त करने के तरीकों की संख्या के रूप में परिभाषित किया जाता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
n = 5
आउटपुट
1
स्पष्टीकरण
2 + 3 = 5, is the only consecutive sum.
समाधान दृष्टिकोण
समस्या का एक सरल समाधान यह है कि N तक सभी क्रमागत संख्याओं की जाँच करें और यदि उनका योग N के बराबर है, तो गिनती बढ़ाएँ जो संख्या की विनम्रता है।
यह समाधान कुशल नहीं है लेकिन एक जटिल लेकिन कुशल समाधान कारककरण का उपयोग कर रहा है। विनम्रता के लिए सूत्र का उपयोग करना जो विषम कारकों की गिनती का उत्पाद होता है, अर्थात
If the number is represented as N = ax * by * cz… Politeness = [(x + 1)*(y +1)*(z + 1)... ] - 1
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <iostream> using namespace std; int calcPolitenessNumber(int n){ int politeness = 1; while (n % 2 == 0) n /= 2; for (int i = 3; i * i <= n; i += 2) { int divCount = 0; while (n % i == 0) { n /= i; ++divCount; } politeness *= divCount + 1; } if (n > 2) politeness *= 2; return (politeness - 1); } int main(){ int n = 13; cout<<"Politeness of "<<n<<" is "<<calcPolitenessNumber(n); return 0; }
आउटपुट
Politeness of 13 is 1