इस GCD ऑपरेशन को दोहराएं


19

2008 पुटनम प्रतियोगिता से समस्या A3 कहती है:

a1,a2,,anj<kajakajakgcd(aj,ak)lcm(aj,ak)

इस चुनौती में आपका लक्ष्य इनपुट के रूप में सकारात्मक पूर्णांकों का सीमित क्रम लेना है, और इस प्रक्रिया को दोहराने का परिणाम तब तक प्राप्त करना है जब तक कि आगे की प्रगति संभव न हो। (अर्थात, जब तक कि परिणाम क्रम में प्रत्येक संख्या उसके बाद आने वाले सभी संख्याओं को विभाजित नहीं करती है।) आपको पुटनम समस्या को हल करने की आवश्यकता नहीं है।

यह : प्रत्येक प्रोग्रामिंग भाषा जीत में सबसे छोटा समाधान।

परीक्षण के मामलों

[1, 2, 4, 8, 16, 32] => [1, 2, 4, 8, 16, 32]
[120, 24, 6, 2, 1, 1] => [1, 1, 2, 6, 24, 120]
[97, 41, 48, 12, 98, 68] => [1, 1, 2, 4, 12, 159016368]
[225, 36, 30, 1125, 36, 18, 180] => [3, 9, 18, 90, 180, 900, 4500]
[17, 17, 17, 17] => [17, 17, 17, 17]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [1, 1, 1, 1, 1, 2, 2, 6, 60, 2520]

9
कितनी साफ-सुथरी समस्या है! प्रत्येक पूर्णांक को और ध्यान दें कि प्रक्रिया केवल सूची- को बबल- करती है समांतर :)2 अल्फा मैं 3 β मैं 5 γ मैं अल्फा , β , γ , ...ai2αi3βi5γiα,β,γ,
लिन

जवाबों:


12

जेली , 9 बाइट्स

ÆEz0Ṣ€ZÆẸ

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

ÆEz0Ṣ€ZÆẸ  Main link. Argument: A (array)

ÆE         For each n in A, compute the exponents of n's prime factorization.
           E.g., 2000000 = 2⁷3⁰5⁶ gets mapped to [7, 0, 6].
  z0       Zip 0; append 0's to shorter exponent arrays to pad them to the same
           length, then read the resulting matrix by columns.
    Ṣ€     Sort the resulting arrays (exponents that correspond to the same prime).
      Z    Zip; read the resulting matrix by columns, re-grouping the exponents by
           the integers they represent.
       ÆẸ  Unexponents; map the exponent arrays back to integers.


5

जे , 17 बाइट्स

/:~"1&.|:&.(_&q:)

इसे ऑनलाइन आज़माएं!

&.दो बार उपयोग करने के लिए संभवतः पीपीसीजी पर पहला जे उत्तर । इस और बाद कि , मैं एक अजीब जम्मू हैकर की तरह महसूस करना शुरू कर रहा हूँ।

मूल रूप से डेनिस 'जेली जवाब से एक अनुवाद ।

यह काम किस प्रकार करता है

/:~"1&.|:&.(_&q:)  Single monadic verb.
           (_&q:)  Convert each number to prime exponents
                   (automatically zero-filled to the right)
       |:&.        Transpose
/:~"1&.            Sort each row in increasing order
       |:&.        Transpose again (inverse of transpose == transpose)
           (_&q:)  Apply inverse of prime exponents; convert back to integers

एक पहले वाला यहां है
फ्रॉन्फ्रॉग

5

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 44 बाइट्स

Table[GCD@@LCM@@@#~Subsets~{i},{i,Tr[1^#]}]&

परिणाम की मई के तत्व एलसीएम के GCD साथ सबसेट है तत्वों।kk

bk=gcd({lcm(ai1,,aik)|1i1<<ikn})

इसे ऑनलाइन आज़माएं!


बहुत अच्छा! आप अजीब दृष्टिकोण पर दो के लिए दो हैं मैं नहीं आया :)
मिशा लावरोव

5

पायथन 3 , 103 बाइट्स

import math
def f(a,i=0,j=-1):d=math.gcd(a[i],a[j]);a[j]*=a[i]//d;a[i]=d;a[i:j]and f(a,i,j-1)==f(a,i+1)

इसे ऑनलाइन आज़माएं!

व्याख्या

यह समस्या मूल रूप से मुख्य कारकों पर एक समानांतर प्रकार है, और (एलसीडी (ए, बी), एलसीएम (ए, बी)) (मिनट (ए, बी), अधिकतम (ए, बी) के अनुरूप है। तो चलो छँटाई के संदर्भ में बात करते हैं।

हम प्रेरण द्वारा साबित करेंगे कि f (i, j) के बाद, [a] L का सबसे छोटा मान (L का पुराना मान) हो जाता है, जहाँ L एक [i] और [j] के बीच की सीमा है, जिसमें दोनों छोर शामिल हैं । और अगर j = -1, f (i, j) श्रेणी L को छाँटेगा।

जब एल में एक तत्व होता है तो मामला तुच्छ होता है। पहले दावे के लिए, ध्यान दें कि स्वैप के बाद L का सबसे छोटा [j] में नहीं रह सकता है, इसलिए f (i, j-1) इसे [i] और f (i + 1, -) में लगाएगा। 1) इसे प्रभावित नहीं करेगा।

दूसरे दावे के लिए, ध्यान दें कि एक [i] सबसे छोटा मान है, और f (i + 1, -1) शेष मानों को छांटेगा, इसलिए L, f (i, j) के बाद क्रमबद्ध हो जाएगा।


3

रेटिना , 65 बाइट्स

\d+
*
+`\b((_+)(\2)+)\b(.*)\b(?!\1+\b)(\2+)\b
$2$4$5$#3*$5
_+
$.&

इसे ऑनलाइन आज़माएं! लिंक में तेज परीक्षण मामले शामिल हैं। स्पष्टीकरण:

\d+
*

यूनीरी में बदलें।

+`\b((_+)(\2)+)\b(.*)\b(?!\1+\b)(\2+)\b

बार-बार मिलान: किसी भी संख्या में एक कारक के साथ, फिर एक बाद की संख्या जो पहली संख्या से विभाज्य नहीं होती है लेकिन कारक से विभाज्य होती है।

$2$4$5$#3*$5

$1पहला नंबर है। $2कारक है। क्योंकि regex लालची है इसलिए यह सबसे बड़ा कारक है यानी gcd। $4मूल संख्याओं के बीच मैच का हिस्सा है। $5दूसरा नंबर है। $#3(दशमलव में एकात्मक के बजाय) एक से कम $1विभाजित है $2, क्योंकि इसमें मूल शामिल नहीं है $2। इसका मतलब यह है कि lcm की गणना करने के लिए हमें $5एक से अधिक गुणा करने की आवश्यकता है , $#3जो कि सबसे अधिक संक्षेप में $5और के उत्पाद के रूप में लिखा गया है $#3और $5

_+
$.&

दशमलव में परिवर्तित करें।


रेटिना के लिए डिफ़ॉल्ट रूप से यूनिरी की अनुमति है , इसलिए आप इसे 52 बाइट्स के रूप में गिन सकते हैं।
डेनिस

@ डेनिस मेरे रेटिना के केवल तीन जवाबों को एकात्मकता में लेते हैं; मुझे दशमलव में I / O करने की आदत है।
नील

3

05AB1E , 10 बाइट्स

दृष्टिकोण का श्रेय एलेफाल्फा को जाता है ।

εIæN>ù€.¿¿

इसे ऑनलाइन आज़माएं!

εIæN>ù€.¿¿     Full program. Takes a list from STDIN, outputs another one to STDOUT.
ε              Execute for each element of the input, with N as the index variable.
 Iæ            Powerset of the input.
   N>ù         Only keep the elements of length N+1.
      €.¿      LCM each.
         ¿     Take the GCD of LCMs.


2

जावास्क्रिप्ट (स्पाइडरमोनी) , 69 बाइट्स

a=>a.map((q,i)=>a.map(l=(p,j)=>a[j]=j>i&&(t=p%q)?p/t*l(q,j,q=t):p)|q)

इसे ऑनलाइन आज़माएं!

  • फ़ंक्शन lअसाइन lcm(p,q)करें a[j], और यदि gcd(p, q)आवश्यक qहो j > i, तो असाइन करें , अन्यथा सब कुछ अपरिवर्तित रहता है।
    • lcm(p,q) = if p%q=0 then p else p*lcm(q,p%q)/(p%q)

पुराना उत्तर:

जावास्क्रिप्ट (स्पाइडरमोनी) , 73 बाइट्स

a=>a.map((u,i)=>a.map((v,j)=>i<j?a[j]*=u/(g=p=>p%u?g(u,u=p%u):u)(v):0)|u)

इसे ऑनलाइन आज़माएं!

  • फ़ंक्शन की gगणना करें gcd(u, v)और वापसी मान निर्दिष्ट करें u

2

05AB1E , 15 14 13 बाइट्स

Ó¾ζ€{øεgÅpymP

पोर्ट ऑफ @ डेनिस ♦ 'जेली जवाब , लेकिन दुर्भाग्य से 05AB1E एक Unexponents-निर्मित नहीं है, ताकि कार्यक्रम Halve की तुलना में अधिक समय लगता है .. :(
-1 बाइट के लिए धन्यवाद @ Mr.Xcoder
-1 बाइट धन्यवाद @Enigma

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

Ó          # Prime exponents of the (implicit) input-list
 ¾ζ        # Zip, swapping rows and columns, with integer 0 as filler
   €{      # Sort each inner list
     ø     # Zip, swapping rows and columns again
ε          # Map each inner list:
 gÅp       #  Get the first `l` primes, where `l` is the size of the inner list
    ym     #  Take the power of the prime-list and inner list
      P    #  And then take the product of that result
           # (And output implicitly)

1
ओह, मैंने अपना जवाब पोस्ट करने से पहले नहीं देखा था। 14 बाइट्स का उपयोग करके ¾और हटाकर , +1। (मैंने इससे पहले यह कोशिश की है क्योंकि मैंने डेनिस के उत्तर को भी अच्छी तरह से
चित्रित

1
का उपयोग करते हुए εgÅpymPएक के ऊपर एक और बाइट की बचत होगी श्री Xcoder metioned
Emigna

@ Mr.Xcoder ओह, पता नहीं था कि भराव 0और के बीच अंतर था ¾। याद रखने की जरूरत है! वास्तव में, मैं इसे अभी अपने छोटे 05AB1E सुझावों में जोड़ूंगा। :)
केविन क्रूज़सेन 10
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.