मान लीजिए कि हमारे पास एक पूर्णांक संख्या है, हमें निरपेक्ष अंतर में निकटतम दो पूर्णांक ज्ञात करने हैं जिनका गुणनफल 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]