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

C++ में निकटतम भाजक

मान लीजिए कि हमारे पास एक पूर्णांक संख्या है, हमें निरपेक्ष अंतर में निकटतम दो पूर्णांक ज्ञात करने हैं जिनका गुणनफल num + 1 या num + 2 के बराबर है। हमें दोनों पूर्णांकों को किसी भी क्रम में खोजना होगा। तो यदि इनपुट 8 है, तो आउटपुट [3, 3] होगा, संख्या + 1 के लिए, यह 9 होगा, निकटतम भाजक 3 और 3 हैं, संख्या + 2 =10 के लिए, निकटतम भाजक 2 और 5 हैं , इसलिए 3 और 3 को चुना जाता है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • getDiv() नामक एक विधि को परिभाषित करें, यह x को इनपुट के रूप में लेगा

  • अंतर:=अनंत, आकार 2 के रिट नामक एक सरणी बनाएं

  • i के लिए :=1, यदि i^2 <=x, तो i को 1 से बढ़ा दें

    • यदि x, i से विभाज्य है, तो

      • ए:=मैं

      • बी:=एक्स / आई

      • newDiff :=|a – b|

      • अगर newDiff

        • अंतर:=नयाडिफ

        • रिट [0]:=ए और रिट [1]:=बी

  • वापसी रिट

  • मुख्य विधि से op1 खोजें:=getDiv(num + 1) और op2:=getDiv(num + 2)

  • op1 लौटाएं जब |op1[0] - op[1]| <=|op2[0] – op2[1]|, अन्यथा op2

उदाहरण (C++)

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector <int> getDiv(int x){
      int diff = INT_MAX;
      vector <int> ret(2);
      for(int i = 1; i * i <= x; i++){
         if(x % i == 0){
            int a = i;
            int b = x / i;
            int newDiff = abs(a - b);
            if(newDiff < diff){
               diff = newDiff;
               ret[0] = a;
               ret[1] = b;
            }
         }
      }
      return ret;
   }
   vector<int> closestDivisors(int num) {
      vector <int> op1 = getDiv(num + 1);
      vector <int> op2 = getDiv(num + 2);
      return abs(op1[0] - op1[1]) <= abs(op2[0] - op2[1]) ? op1 : op2;
   }
};
main(){
   Solution ob;
   print_vector(ob.closestDivisors(8));
}

इनपुट

8

आउटपुट

[3,3]

  1. सी ++ में मैट्रिक्स का निर्धारक?

    मैट्रिक्स के निर्धारक की गणना केवल एक वर्ग मैट्रिक्स के लिए की जा सकती है, पहली पंक्ति कोफ़ैक्टर को संबंधित कॉफ़ैक्टर के निर्धारक द्वारा गुणा करके और अंतिम परिणाम प्राप्त करने के लिए वैकल्पिक संकेतों के साथ जोड़कर। $$A =\begin{bmatrix}a &b &c\\d &e &f \\g &h &i \\ \end{bmatrix}|A| =a(ei-fh)-b(di-gf

  1. C++ में रेंज एडिशन

    मान लीजिए कि हमारे पास आकार n की एक सरणी है और इसे 0 के साथ आरंभीकृत किया गया है और हमारे पास एक मान k भी है, हम k अद्यतन संचालन करेंगे। प्रत्येक ऑपरेशन को ट्रिपलेट के रूप में दर्शाया जाएगा:[स्टार्टइंडेक्स, एंडइंडेक्स, इंक] जो सबरे ए के प्रत्येक तत्व को बढ़ाता है [स्टार्टइंडेक्स ... एंडइंडेक्स] (स्ट

  1. C++ . में रेखा परावर्तन

    मान लीजिए कि हमारे पास 2D तल पर n बिंदु हैं, हमें यह जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से दर्शाती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो दी गई रेखा पर सभी बिंदुओं को प्रतिबिंबित करने के बाद मूल बिंदुओं का सेट वही होता है जो प्रतिबि