मान लीजिए हमारे पास दो सकारात्मक मान n और k हैं। अब विचार करें कि हमारे पास आरोही क्रम में क्रमबद्ध n के सभी कारकों की एक सूची है, हमें इस सूची में kth कारक खोजना होगा। अगर k से कम गुणक हैं, तो -1 लौटाएं।
इसलिए, यदि इनपुट n =28 k =4 जैसा है, तो आउटपुट 7 होगा, क्योंकि 28 के गुणनखंड [1,2,4,7,14,28] हैं, चौथा वाला 7 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अगर k 1 के समान है, तो
-
वापसी 1
-
-
cand :=एक तत्व के साथ एक सूची [1]
-
मैं के लिए 2 से 1 + तल (n का वर्गमूल) की सीमा में, करें
-
अगर n mod i 0 के समान है, तो
-
कैंड के अंत में i डालें
-
-
मी :=कैंडी का आकार
-
-
अगर k> 2*m या (k 2*m और n =(कैंडी का अंतिम तत्व) के समान है^2)
-
वापसी -1
-
-
अगर के <=मी, तो
-
वापसी कैंड [के -1]
-
-
फ़ैक्टर :=cand[2*m - k]
-
n/कारक का रिटर्न भागफल
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from math import floor def solve(n ,k): if k == 1: return 1 cand = [1] for i in range(2, 1+floor(pow(n, 0.5))): if n%i == 0: cand.append(i) m = len(cand) if k > 2*m or (k == 2*m and n == cand[-1]**2): return -1 if k <= m: return cand[k-1] factor = cand[2*m - k] return n//factor n = 28 k = 4 print(solve(n ,k))
इनपुट
28, 4
आउटपुट
7