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

Python में विभिन्न सबसीक्वेंस GCDs की संख्या ज्ञात करें

धनात्मक पूर्णांकों की सरणी nums दी गई है। सभी गैर-खाली सबसीक्वेंस के GCDs में से अद्वितीय मानों की संख्या ज्ञात करें।

मुख्य अंतर्दृष्टि

एक मान x किसी सबसीक्वेंस का GCD हो सकता है यदि और केवल यदि nums में x के गुणज हैं जिनका GCD ठीक x है।

एल्गोरिदम: सीव-जैसा दृष्टिकोण

  1. T = max(nums) + 1
  2. nums को सेट में बदलें (O(1) लुकअप)
  3. प्रत्येक x = 1 से T-1 के लिए:
    • x के सभी गुणज y जांचें जो nums में हैं
    • उनका GCD गणना करें
    • यदि GCD = x तो x एक वैध GCD है

Python कार्यान्वयन


from math import gcd

def count_different_subsequence_gcds(nums):
    T = max(nums) + 1
    num_set = set(nums)
    ans = 0
    
    for x in range(1, T):
        g = 0
        # x के सभी गुणज जांचें
        for y in range(x, T, x):
            if y in num_set:
                g = gcd(g, y)
                if g == x:  # जल्दी ब्रेक: GCD x तक पहुंच गया
                    break
        if g == x:
            ans += 1
    
    return ans

# परीक्षण
nums = [4, 6, 18]
print(count_different_subsequence_gcds(nums))  # 4

व्याख्या (nums = [4, 6, 18])

xnums में x के गुणजउनका GCDवैध?
1कोई नहीं0नहीं
24, 6, 18gcd(4,6,18)=2हां
36, 18gcd(6,18)=6नहीं (6≠3)
444हां
5कोई नहीं0नहीं
66, 186हां
181818हां

वैध GCDs: {2, 4, 6, 18} → उत्तर = 4

जटिलता

  • समय: O(T log T) जहां T = max(nums)। हार्मोनिक श्रृंखला: Σ(T/x) = T log T
  • स्थान: O(T) सेट के लिए

अनुकूलन


# उपस्थिति सरणी (सेट से तेज़)
present = [False] * T
for x in nums:
    present[x] = True

for x in range(1, T):
    g = 0
    for y in range(x, T, x):
        if present[y]:
            g = gcd(g, y)
            if g == x:
                break
    if g == x:
        ans += 1

मुख्य बिंदु

  • प्रत्येक संभावित GCD मान x के लिए जांचें कि क्या यह प्राप्त करने योग्य है
  • गुणजों पर पुनरावृति करके कुशलता से जांचें
  • जल्दी ब्रेक जब GCD x तक पहुंच जाए
  • यह दृष्टिकोण LeetCode "Number of Different Subsequences GCDs" समस्या का मानक समाधान है
  1. - Python प्रोग्राम में अभाज्य संख्या खोजने के विभिन्न तरीकों का विश्लेषण

    इस ट्यूटोरियल में, हम अभाज्य संख्या खोजने के विभिन्न तरीकों और प्रत्येक विधि के लिए आवश्यक समय को देखेंगे। हम निष्पादन समय की गणना के लिए time मॉड्यूल का उपयोग करेंगे।विधि-1यह अभाज्य संख्या खोजने की एक सामान्य विधि है।यदि संख्या एक से कम या बराबर है, तो False लौटाएं।यदि संख्या किसी संख्या से विभाज्य

  1. - पायथन प्रोग्राम: लिस्ट में सबसे बड़ी संख्या ढूंढें

    इस लेख में, हम दिए गए प्रॉब्लम स्टेटमेंट को हल करने के समाधान और दृष्टिकोण के बारे में सीखेंगे। प्रॉब्लम स्टेटमेंट लिस्ट इनपुट दिए जाने पर, हमें दी गई लिस्ट में सबसे बड़ी संख्या ढूंढने की आवश्यकता है। यहां हम दो दृष्टिकोणों पर चर्चा करेंगे: सॉर्टिंग तकनीकों का उपयोग करना बिल्ट-इन max() फंक्शन का

  1. - पायथन में अभाज्य संख्या खोजने के विभिन्न तरीके

    सबसे पहले हमें यह जानने की जरूरत है कि अभाज्य संख्या क्या है। एक अभाज्य संख्या हमेशा एक धनात्मक पूर्णांक संख्या होती है और ठीक 2 पूर्णांकों (1 और संख्या स्वयं) से विभाज्य होती है, 1 अभाज्य संख्या नहीं है। अब हम अभाज्य संख्या खोजने के कुछ तरीकों पर चर्चा करेंगे। विधि 1 फॉर लूप्स का उपयोग करना उदाहरण