मान लीजिए हमारे पास संख्याओं की एक सरणी है; हमें एक संख्या B ढूंढनी है जो दिए गए सरणी में ठीक एक तत्व को छोड़कर सभी का भाजक है। हमें ध्यान रखना होगा कि सभी तत्वों का GCD 1 नहीं है।
यदि इनपुट {8, 16, 4, 24} जैसा है, तो आउटपुट 8 होगा क्योंकि यह 4 को छोड़कर सभी का भाजक है।
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- n := सरणी का आकार
- यदि n, 1 के समान है, तो (array[0] + 1) लौटाएं
- prefix := आकार n की एक सरणी, 0 से भरी हुई
- suffix := आकार n की एक सरणी, 0 से भरी हुई
- prefix[0] := array[0]
- i को 1 से n तक के लिए, करें:
- prefix[i] := gcd(array[i], prefix[i-1])
- suffix[n-1] := array[n-1]
- i को n-2 से -1 तक 1 घटाकर, करें:
- suffix[i] := gcd(suffix[i+1], array[i])
- i को 0 से n+1 तक के लिए, करें:
- cur := 0
- यदि i, 0 के समान है, तो cur := suffix[i+1]
- अन्यथा यदि i, n-1 के समान है, तो cur := prefix[i-1]
- अन्यथा, cur := gcd(prefix[i-1], suffix[i+1])
- यदि array[i] % cur != 0, तो cur लौटाएं
- 0 लौटाएं
उदाहरण कोड
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
from math import gcd
def getDivisor(array):
n = len(array)
if n == 1:
return array[0] + 1
prefix = [0] * n
suffix = [0] * n
prefix[0] = array[0]
for i in range(1, n):
prefix[i] = gcd(array[i], prefix[i - 1])
suffix[n - 1] = array[n - 1]
for i in range(n - 2, -1, -1):
suffix[i] = gcd(suffix[i + 1], array[i])
for i in range(n):
cur = 0
if i == 0:
cur = suffix[i + 1]
elif i == n - 1:
cur = prefix[i - 1]
else:
cur = gcd(prefix[i - 1], suffix[i + 1])
if array[i] % cur != 0:
return cur
return 0
array = [8, 16, 4, 24]
print(getDivisor(array))
इनपुट
[8, 16, 4, 24]
आउटपुट
8