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

पायथन में जीसीडी ग्रेटर बनाने के लिए सरणी से न्यूनतम निष्कासन

मान लीजिए हमारे पास एन नंबरों की एक सूची है; हमें संख्याओं को हटाने की न्यूनतम संख्या ज्ञात करनी होगी ताकि शेष संख्याओं का GCD N संख्याओं के प्रारंभिक GCD से बड़ा हो।

इसलिए, यदि इनपुट [6,9,15,30] जैसा है, तो आउटपुट 2 होगा क्योंकि प्रारंभिक जीसीडी 3 है, इसलिए 6 और 9 को हटाने के बाद हम 15, 15> 3 के रूप में जीसीडी प्राप्त कर सकते हैं।>

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

  • आईएनएफ:=100001
  • spf :=0 से INF के तत्वों वाली एक सूची
  • फ़ंक्शन चलनी को परिभाषित करें ()
  • 4 से INF की श्रेणी में i के लिए, 2 से बढ़ाएँ, करें
    • एसपीएफ़[i] :=2
  • मैं श्रेणी 3 से लेकर INF तक, करते हैं
    • अगर i^2> INF −
      • ब्रेक
    • अगर एसपीएफ [i] मैं के समान है, तो
      • जे के लिए रेंज 2 * i से INF, प्रत्येक चरण में i द्वारा अपडेट करें, करते हैं
        • यदि spf[j], j के समान है, तो
          • spf[j] :=i
  • एक फंक्शन कैल्क_फैक्ट () को परिभाषित करें। इसमें x लगेगा
  • रिट:=एक नई सूची
  • जबकि x 1 के समान नहीं है, करें
    • सेवा के अंत में spf[x] डालें
    • x :=x / spf[x] (केवल पूर्णांक भाग प्राप्त करें)
  • रिटर्न रिटर्न
  • मुख्य विधि से निम्न कार्य करें -
  • जी :=0
  • मैं के लिए 0 से n की सीमा में, करते हैं
    • g :=gcd(a[i], g)
  • my_map :=एक नया नक्शा
  • मैं के लिए 0 से n की सीमा में, करते हैं
    • a[i] :=a[i] / g (केवल पूर्णांक भाग प्राप्त करें)
  • मैं के लिए 0 से n की सीमा में, करते हैं
    • p :=calc_fact(a[i])
    • s :=एक नया नक्शा
    • जे के लिए 0 से लेकर पी के आकार तक, करें
      • s[p[j]] :=1
    • प्रत्येक i के लिए, करते हैं
      • my_map[i] :=my_map + 1
      • . का प्राप्त करें(i, 0)
  • न्यूनतम =10^9
  • my_map में प्रत्येक i के लिए, करते हैं
    • पहला:=मैं
    • दूसरा:=my_map[i]
    • यदि (n - सेकंड) <=न्यूनतम, तो
      • न्यूनतम :=n - सेकंड
  • यदि न्यूनतम 10^9 नहीं है, तो
    • न्यूनतम वापसी
  • अन्यथा,
    • वापसी -1

उदाहरण

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

from math import gcd as __gcd
INF = 100001
spf = [i for i in range(INF)]
def sieve():
   for i in range(4, INF, 2):
      spf[i] = 2
   for i in range(3, INF):
      if i**2 > INF:
         break
      if (spf[i] == i):
         for j in range(2 * i, INF, i):
            if (spf[j] == j):
               spf[j] = i
def calc_fact(x):
   ret = []
   while (x != 1):
      ret.append(spf[x])
      x = x // spf[x]
   return ret
def minRemove(a, n):
   g = 0
   for i in range(n):
      g = __gcd(a[i], g)
   my_map = dict()
   for i in range(n):
      a[i] = a[i] // g
   for i in range(n):
      p = calc_fact(a[i])
      s = dict()
      for j in range(len(p)):
         s[p[j]] = 1
      for i in s:
         my_map[i] = my_map.get(i, 0) + 1
   minimum = 10**9
   for i in my_map:
      first = i
      second = my_map[i]
      if ((n - second) <= minimum):
         minimum = n - second
   if (minimum != 10**9):
      return minimum
   else:
      return -1
a = [6, 9, 15, 30]
n = len(a)
sieve()
print(minRemove(a, n))

इनपुट

[6, 9, 15, 30], 4

आउटपुट

2

  1. पायथन में सबस्ट्रिंग से पालिंड्रोम बना सकते हैं

    मान लीजिए कि हमारे पास एक स्ट्रिंग s है, हमें s के सबस्ट्रिंग्स पर क्वेरी करनी है। प्रत्येक क्वेरी क्वेरी [i] के लिए, तीन भाग होते हैं [बाएं, दाएं, के], हम सबस्ट्रिंग एस [बाएं], ..., एस [दाएं] को पुनर्व्यवस्थित कर सकते हैं, और फिर उनमें से k को बदलने के लिए चुन सकते हैं कोई भी लोअरकेस अंग्रेजी अक्षर

  1. पायथन में ऐरे ज़िगज़ैग बनाने के लिए तत्वों को घटाएं

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी संख्या है, एक चाल ऑपरेशन वास्तव में किसी भी तत्व को चुन रहा है और इसे 1 से घटा रहा है। एक सरणी ए एक ज़िगज़ैग सरणी है यदि 1 या 2 संतुष्ट है - ए [1] ए [3] ... और इसी तरह। प्रत्येक विषम-अनुक्रमित तत्व आसन्न तत्वों से बड़ा है, इसलिए। ए [0] ए [2] ए [

  1. पायथन में क्रमबद्ध सरणी से डुप्लिकेट निकालें

    मान लीजिए कि हमारे पास एक क्रमबद्ध सूची ए है। हमें सभी डुप्लिकेट प्रविष्टियों को हटाने के बाद सरणी की लंबाई वापस करनी होगी। हमें इसे O(1) अतिरिक्त स्थान में करना है। इसलिए हमें ऑपरेशन जगह-जगह करना होगा। उदाहरण के लिए, मान लीजिए ए =[1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5, 6] तो आउटपुट 6 होगा, क्योंकि