दिव्यांगों का उत्पाद


21

चुनौती

एक सकारात्मक पूर्णांक को देखते हुए, अपने स्वयं के सहित अपने विभाजकों के उत्पाद को लौटाएं।

यह OEIS में अनुक्रम A007955 है

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

1 1
२: २
3: 3
4: 8
5: 5
6: 36
7: 7
8: 64
9: 27
10: 100
12: 1728
14: 196
24: 331776
25: 125
28: 21952
30: 810000

स्कोरिंग

यह , इसलिए प्रत्येक भाषा में सबसे कम उत्तर जीतता है!


2
दिलचस्प नोट (हालांकि इस चुनौती के लिए उपयोगी नहीं है): n के सभी विभाजकों का उत्पाद हमेशा n ^ ((n के विभाजकों की संख्या) / 2) होता है।
वोजू जूल

जवाबों:



7

जाप , 3 बाइट्स

â ×

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

व्याख्या

â ×  // implicit integer input

â    // get integer divisors
  ×  // get product of array

लानत है, तुम मुझे निंजा कैसे किया ?! : p जब कंप्यूटर (जब भी हो सकता है) से मिलने पर मेरा डिलीट हो जाएगा।
झबरा

@ शैगी मुझे आश्चर्य है, क्योंकि मुझे अभी दोनों के बारे में पता चला है âऔर ×यह उत्तर लिखते समय
जस्टिन मेरिनर

मैं मिनट तक धीमा हो गया था। चरित्र की सीमा!
झबरा







3

3
मुझे उत्तर के माध्यम से स्क्रॉल करना: सादा मोनोसेप्ड कोड, सादा मोनोसेप्ड कोड, सादा ... बोल्ड, सेरिफ़ कोड? :-P
ETHproductions

@ETHproductions हेहे।
ओकेक्स

4
@ETHproductions मैंने वास्तव में IOS पर इस उत्तर को कोडित किया है जिसका अर्थ है कि मैं वास्तव में पात्रों को नहीं देख सकता।
ओकेक्स

यह ... काफी प्रभावशाली है।
ETHproductions

2
@MamaFunRoll अब एक ऐसा नाम है जिसे मैंने लंबे, लंबे समय में नहीं सुना है ... ;-)
ETHproductions


2

x86-64 मशीन कोड, 26 बाइट्स

31 C9 8D 71 01 89 F8 FF C1 99 F7 F9 85 D2 75 03 0F AF F1 39 F9 7C EE 89 F0 C3

उपरोक्त कोड एक फ़ंक्शन को परिभाषित करता है जो एकल पैरामीटर (इनपुट मान, एक सकारात्मक पूर्णांक) को EDI(निम्नलिखित में) लेता है सिस्टम वी AMD64 बुला सम्मेलन जीएनयू / यूनिक्स पर इस्तेमाल किया), और में एक भी परिणाम (divisors के उत्पाद) देता है EAX

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

असंगठित असेंबली लैंग्वेज मेंमिक्स:

; Parameter is passed in EDI (a positive integer)
ComputeProductOfDivisors:
   xor   ecx, ecx        ; ECX <= 0  (our counter)
   lea   esi, [rcx + 1]  ; ESI <= 1  (our running total)
.CheckCounter:
   mov   eax, edi        ; put input value (parameter) in EAX
   inc   ecx             ; increment counter
   cdq                   ; sign-extend EAX to EDX:EAX
   idiv  ecx             ; divide EDX:EAX by ECX
   test  edx, edx        ; check the remainder to see if divided evenly
   jnz   .SkipThisOne    ; if remainder!=0, skip the next instruction
   imul  esi, ecx        ; if remainder==0, multiply running total by counter
.SkipThisOne:
   cmp   ecx, edi        ; are we done yet? compare counter to input value
   jl    .CheckCounter   ; if counter hasn't yet reached input value, keep looping

   mov   eax, esi        ; put our running total in EAX so it gets returned
   ret

तथ्य यह है कि IDIVनिर्देश डिविडेंड के लिए हार्ड-कोडेड ऑपरेंड्स का उपयोग करता है, मेरी शैली को थोड़ा क्रैम्प करता है, लेकिन मुझे लगता है कि यह एक ऐसी भाषा के लिए बहुत अच्छा है जिसमें कोई अंतर्निहित इंसिमेंट और सशर्त शाखाएं नहीं हैं!


2

टीआई-बेसिक (TI-84 Plus CE), 24 बाइट्स

Prompt X
1
For(A,1,X
If not(remainder(X,A
AAns
End

पूर्ण कार्यक्रम: इनपुट के लिए उपयोगकर्ता को संकेत देता है; में आउटपुट देता है Ans, ए विशेष चर जो (मूल रूप से) गणना की गई नवीनतम मूल्य का मूल्य रखता है।

स्पष्टीकरण:

Prompt X             # 3 bytes, Prompt user for input, store in X
1                    # 2 bytes, store 1 in Ans for use later
For(A,1,X            # 7 bytes, for each value of A from 1 to X
If not(remainder(X,A # 8 bytes, If X is divisible by A...
AAns                 # 3 bytes, ...store (A * Ans) in Ans
End                  # 1 byte, end For( loop

2
आपने वास्तव में बायटेकाउंट को शामिल नहीं किया था।
एर्ग आउटफोलर

@EriktheOutgolfer वूप्स! फिक्स्ड।
pizzapants184

2

सी (जीसीसी), ५२ 48 बाइट्स

p,a;f(x){for(p=1,a=x;a;a--)p*=x%a?1:a;return p;}

कोडी ग्रे के लिए -4 बाइट्स धन्यवाद

एक फ़ंक्शन जो एक पूर्णांक में लेता है और इसके डिवाइडर का उत्पाद लौटाता है।

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

Ungolfed:

int proddiv(int input) {
    int total = 1, loopvar;
    for(loopvar = input; loopvar > 0; --loopvar) {
    // for loopvar from input down to 1...
        total *= (input % loopvar) ? 1 : loopvar;
        // ...If the loopvar is a divisor of the input, multiply the total by loopvar;
    }
    return total;
}

आप 4 बाइट्स (1) को पीछे की ओर गिनते हुए बचा सकते हैं, (2) p*=एक्सप्रेशन के चारों ओर कोष्ठक को हटा सकते हैं , और (3) forकॉमा को छोड़ने के लिए लूप के शरीर में एक स्टेटमेंट डाल सकते हैं । मैं अतिरिक्त मापदंडों को जोड़ने के बजाय वैश्विक संस्करणों का उपयोग करना पसंद करता हूं। यह किसी भी बाइट की लागत के बिना अपरिभाषित व्यवहार से बचा जाता है। अंतिम संस्करण:p,a;f(x){for(p=1,a=x;a;--a)p*=x%a?1:a;return p;}
कोडी ग्रे

आप पांच बाइट्स के return p;साथ बदल सकते हैं p=p;और बचा सकते हैं ।
जोनाथन फ्रीच

एक और बाइट को बचाने के लिए, आप के p,a;f(x)साथ बदल सकते हैं f(x,p,a)
जोनाथन फ्रेच

यदि आप वैश्विक चर के बजाय स्थानीय का उपयोग करते हैं, तो आप पूरे से छुटकारा पा सकते हैं return p;और पांच नहीं, बल्कि नौ बाइट बचा सकते हैं। ( टीआईओ )
जोनाथन फ्रेच

2

जावास्क्रिप्ट (ईएस 7), 32 बाइट्स

n=>g=(i=n)=>i?i**!(n%i)*g(i-1):1

संगीतकार के पाइथन समाधान पर लीकी की टिप उधार लेकर बाइट के एक जोड़े को बचाया ।


कोशिश करो

o.innerText=(f=
n=>g=(i=n)=>i?i**!(n%i)*g(i-1):1
)(i.value=1)();oninput=_=>o.innerText=f(+i.value)()
<input id=i type=number><pre id=o>


वैकल्पिक (ईएस 6), 32 बाइट्स

n=>g=(i=n)=>i?(n%i?1:i)*g(i-1):1

1
सिर्फ ES6- संगत क्यों नहीं (n%i?1:i)? (हालांकि, यह किसी भी बाइट को नहीं बचाएगा।)
अरनॉल्ड

@ अरनल्ड: क्योंकि फोन गोल्फ के लिए आधा 6 स्पष्ट रूप से सुबह जल्दी है! : जब मैंने लीकी की टिप देखी, तो डीआई ने टर्नरी उलट दी थी!
झबरा

2

टीआई-बेसिक, 24 14 13 बाइट्स

1 बाइट lirtosiast के लिए धन्यवाद बचा लिया

:√(Ans^sum(not(fPart(Ans/randIntNoRep(1,Ans

1
क्या आपको जरूरत है int(?
lirtosiast

1

QBIC , 22 बाइट्स

[:|~b/a=b'\`a|q=q*a}?q

व्याख्या

[:|           FOR a  = 1; a <= input (b); a++
 b/a=b'\`a    'a' is a proper divisor if integer division == float division
~         |   IF that's true
q=q*a         THEN multiply running total q (starts as 1) by that divsor
}             NEXT
?q            Print q



1

गणितज्ञ, 17 बाइट्स

उन लोगों के लिए जो हटाए गए उत्तर (डेविडसी का उत्तर) नहीं देख सकते, यह @MartinEnder की मदद से गणितज्ञ का कोड है

1##&@@Divisors@#&

1

शेक्सपियर प्रोग्रामिंग लैंग्वेज , 353 बाइट्स

.
Ajax,.
Puck,.
Page,.
Act I:.
Scene I:.
[Enter Ajax and Puck]
Ajax:
You cat
Puck:
Listen to thy heart
[Exit Ajax]
[Enter Page]
Scene II:.
Puck:
You sum you cat
Page:
Is Ajax nicer I?If so, is remainder of the quotient Ajax I nicer zero?If not, you product you I.Is Ajax nicer I?If so, let us return to scene II
Scene III:.
Page:
Open thy heart
[Exeunt]

Ungolfed संस्करण:

The Tragedy of the Product of a Moor's Factors in Venice.

Othello, a numerical man.
Desdemona, a product of his imagination.
Brabantio, a senator, possibly in charge of one Othello's factories.

Act I: In which tragedy occurs.

Scene I: Wherein Othello and Desdemona have an enlightened discussion.

[Enter Othello and Desdemona]

Othello:
  Thou art an angel!

Desdemona:
  Listen to thy heart.

[Exit Othello]
[Enter Brabantio]

Scene II: Wherein Brabantio expresses his internal monologue to Desdemona.

Desdemona:
  Thou art the sum of thyself and the wind!

Brabantio:
  Is Othello jollier than me?
  If so, is the remainder of the quotient of Othello and I better than nothing?
  If not, thou art the product of thyself and me.
  IS Othello jollier than me?
  If so, let us return to scene II!

Scene III: An Epilogue.

Brabantio:
  Open thy heart!

[Exeunt]

मैं प्रोग्राम को चलाने के लिए इस SPL कंपाइलर का उपयोग कर रहा हूं ।

साथ दौड़ो:

$ python splc.py product-of-divisors.spl > product-of-divisors.c
$ gcc product-of-divisors.c -o pod.exe
$ echo 30 | ./pod
810000

1

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

lambda _:_**(sum(_%-~i<1for i in range(_))/2)

आज्ञा xदेना एक संख्या है। दोनों yऔर zके divisors हो जाएगा xयदि y * z = x। इसलिए, y = x / z। चलो एक नंबर का कहना है कि d6 divisiors है, इस अवलोकन divisors हो जाएगा की वजह से a, b, c, d / a, d / b, d / b। यदि हम इन सभी संख्याओं (पहेली के बिंदु) को गुणा करते हैं, तो हम प्राप्त करते हैं d * d * d = d ^ 3। सामान्य तौर पर, eकई fदिव्यांगों के लिए, उक्त विभाजकों का उत्पाद होगा e ^ (f / 2), जो कि लैम्ब्डा करता है।

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


1

MY , 4 बाइट्स

हेक्स:

1A 3A 54 27

स्पष्टीकरण:

1A - Input as an integer
3A - Factors
54 - Product
27 - Output (with newline)








0

Axiom, 23 बाइट्स

h(x)==x^(#divisors x/2)

यह Alep of alephalpha समाधान का अनुवाद है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.