Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

अधिकतम N इस प्रकार ज्ञात कीजिए कि C++ में प्रथम N प्राकृत संख्याओं के वर्ग का योग X से अधिक न हो

अवधारणा

किसी दिए गए पूर्णांक X के संबंध में, हमारा कार्य अधिकतम मान N निर्धारित करना है ताकि पहली N प्राकृतिक संख्याओं का योग X से अधिक न हो।

इनपुट

X = 7

आउटपुट

2

2 N का अधिकतम संभव मान है क्योंकि N =3 के लिए, श्रृंखला का योग Xi से अधिक होगा। 1^2 + 2^2 + 3^2 =1 + 4 + 9 =14

इनपुट

X = 27

आउटपुट

3

3 N का अधिकतम संभव मान है क्योंकि N =4 के लिए, श्रृंखला का योग Xi से अधिक होगा। 1^2 + 2^2 + 3^2 + 4^2 =1 + 4 + 9 + 16 =30

विधि

सरल समाधान - यहाँ, एक सरल उपाय यह है कि 1 से अधिकतम N तक एक लूप निष्पादित किया जाए ताकि S(N) X, इस स्थिति में S(N) को प्रथम N प्राकृत संख्याओं के वर्ग का योग कहा जाए। इसके परिणामस्वरूप, पहले N प्राकृतिक संख्याओं के वर्ग का योग सूत्र S(N) =N * (N + 1) * (2 * N + 1) / 6.

द्वारा दिया जाता है।

यह ध्यान दिया जाना चाहिए कि इस दृष्टिकोण की समय जटिलता ओ (एन) है।

कुशल दृष्टिकोण - हम एक और कुशल समाधान लागू कर सकते हैं जो द्विआधारी खोज दृष्टिकोण पर आधारित है।

हम नीचे दिए गए एल्गोरिथम का अनुसरण करते हैं जिसे चरण दर चरण समझाया गया है -

  • बड़ी सरणी में द्विआधारी खोज शुरू करें और मध्य (निम्न + उच्च) / 2 के रूप में प्राप्त करें

  • यह देखा गया है कि यदि दोनों सरणी से मान समान है तो तत्व सही भाग में होना चाहिए, मध्य के रूप में कम होना चाहिए

  • अन्यथा उच्च को मध्य के रूप में चिह्नित करें क्योंकि यदि मध्य तत्व समान नहीं हैं तो तत्व बड़े सरणी के बाएं भाग में होना चाहिए।

यह ध्यान दिया जाना चाहिए कि इस दृष्टिकोण की समय जटिलता ओ (लॉग एन) है।

उदाहरण

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
#define ll long long
// Shows function to return the sum of the squares
// of first N1 natural numbers
ll squareSum(ll N1){
   ll sum1 = (ll)(N1 * (N1 + 1) * (2 * N1 + 1)) / 6;
   return sum1;
}
// Shows function to return the maximum N such that
// the sum of the squares of first N
// natural numbers is not more than X
ll findMaxN(ll X){
   ll low1 = 1, high1 = 100000;
   int N1 = 0;
   while (low1 <= high1) {
      ll mid1 = (high1 + low1) / 2;
      if (squareSum(mid1) <= X) {
         N1 = mid1;
         low1 = mid1 + 1;
      }
      else
         high1 = mid1 - 1;
   }
   return N1;
}
// Driver code
int main(){
   ll X = 27;
   cout << findMaxN(X);
   return 0;
}

आउटपुट

3

  1. C++ . में प्रथम n प्राकृत संख्याओं के योग का योग

    इस समस्या में पहली n प्राकृत संख्याओं के योग का योग ज्ञात करने के लिए, हम 1 से n तक की सभी संख्याओं का योग ज्ञात करेंगे और योग ज्ञात करने के लिए उन्हें एक साथ जोड़ेंगे। आइए अवधारणा के बारे में जानने के लिए एक उदाहरण लेते हैं, Input : 4 Output : 10 Explanation : Sum of first 1 natural number = 1 Sum

  1. पहली n प्राकृतिक संख्याओं का योग ज्ञात करने के लिए PHP प्रोग्राम जो एक संख्या 'x' या एक संख्या 'y' से विभाज्य हैं

    पहली n प्राकृत संख्याओं का योग ज्ञात करने के लिए जो एक संख्या x या एक संख्या y से विभाज्य हैं, कोड इस प्रकार है - उदाहरण <?php function sum_of_nums($n_val, $x_val, $y_val) {    $val_1; $val_2; $val_3;    $val_1 = floor(((int)$n_val / $x_val)) * (2 * $x_val + (int)((int)$n_val

  1. अधिकतम N ज्ञात करें जैसे कि पहले N प्राकृतिक संख्याओं के वर्ग का योग Python में X से अधिक न हो

    मान लीजिए कि हमारे पास एक दिया गया पूर्णांक X है, हमें अधिकतम मान N ज्ञात करना है ताकि पहले N प्राकृतिक संख्याओं का योग मान X से अधिक न हो। इसलिए, यदि इनपुट X =7 जैसा है, तो आउटपुट 2 होगा क्योंकि 2 N का अधिकतम संभव मान है, N =3 के लिए, श्रृंखला का योग X =7 से अधिक होगा इसलिए, 1^2 + 2^ 2 + 3^2 =1 +