Mertens फ़ंक्शन की गणना करें


18

एक सकारात्मक पूर्णांक n को देखते हुए , Mertens फ़ंक्शन M ( n ) के मान की गणना करें जहां

Mertens

और μ ( k ) Möbius फ़ंक्शन है जहां μ ( k ) = 1 यदि k में अलग-अलग प्रधान कारकों की एक समान संख्या है, -1, यदि k में भिन्न प्रधान कारकों की विषम संख्या है, और 0 यदि प्रधान कारक भिन्न नहीं हैं।

  • यह इसलिए किसी फ़ंक्शन या प्रोग्राम के लिए सबसे छोटा कोड बनाएं जो इनपुट पूर्णांक n > 0 के लिए Mertens फ़ंक्शन की गणना करता है ।
  • यह OEIS अनुक्रम A002321 है

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

n M(n)
1 1
2 0
3 -1
4 -1
5 -2
6 -1
7 -2
8 -2
9 -2
10 -1
117 -5
5525 5
7044 -25
8888 4
10000 -23


क्या हम 1 के बजाय ट्रू लौटा सकते हैं ? प्रासंगिक मेटा चर्चा: क्या बूलियंस को अनुमति दी जानी चाहिए जहां एक नंबर की आवश्यकता है?
डेनिस

@ डेनिस ज़रूर करें यदि आपकी भाषा ट्रू के रूप में सत्य की व्याख्या करती है
मील

जवाबों:


6

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

:Ḋ߀SC

इसे ऑनलाइन आज़माएं! या छोटे परीक्षण मामलों की पुष्टि करें । (कुछ समय लगता है)

पृष्ठभूमि

यह संपत्ति का उपयोग करता है

डेविड डब्ल्यू विल्सन द्वारा संपत्ति

से A002321 , निम्नलिखित पुनरावर्ती सूत्र के जो सुराग।

पुनरावर्ती सूत्र

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

:Ḋ߀SC  Main link. Argument: n

 Ḋ      Dequeue; yield [2, ..., n].
:       Perform the integer division of n by each k in [2, ..., n].
  ߀    Recursively call the main link on each result.
    S   Sum; add the results from the recursive calls.
     C  Complement; map the sum r to 1 - r.

11

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

2 बाइट बचाने के लिए @ मीलों के लिए धन्यवाद।

Tr@*MoebiusMu@*Range

व्याख्या

Range

1 से इनपुट तक एक सूची बनाएं।

MoebiusMu

MoebiusMuप्रत्येक संख्या का पता लगाएं

Tr

परिणाम का योग।


2
मुझे पसंद है कि कैसे गणितज्ञ के पास हर चीज के लिए एक बेसिन है, लेकिन यह आमतौर पर वैसे भी एक गोल्फ भाषा से अधिक लंबा है। = डी
DJMcMayhem

5
मथमेका के लिए एक और कॉल, मैथमेटिका का कमांड-नाम-लंबाई-अनुकूलित संस्करण।
माइकल स्टर्न

11

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

f=lambda n,k=2:n<k or f(n,k+1)-f(n/k)

Ideone पर इसका परीक्षण करें ।

पृष्ठभूमि

यह संपत्ति का उपयोग करता है

डेविड डब्ल्यू विल्सन द्वारा संपत्ति

से A002321 , निम्नलिखित पुनरावर्ती सूत्र के जो सुराग।

पुनरावर्ती सूत्र

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

हम केवल उद्धरणों के लिए M की गणना करने के लिए नहीं , बल्कि उन छवियों के योग की गणना करने के लिए भी पुनरावर्तन का उपयोग करते हैं । यह निम्नलिखित, सीधे कार्यान्वयन पर 8 बाइट्स बचाता है।

M=lambda n:1-sum(M(n/k)for k in range(2,n+1))

जब f को एकल तर्क n के साथ बुलाया जाता है , तो वैकल्पिक तर्क k 2 में चूक जाता है ।

यदि n = 1 , n<kपैदावार यह सच है और रिटर्न इस मूल्य। यह हमारा आधार मामला है।

यदि n> 1 , n<kशुरू में गलत हो जाता है और निम्नलिखित कोड orनिष्पादित हो जाता है। f(n/k)पुनरावर्ती राशि के एक शब्द की गणना करता है, जिसे के वापसी मूल्य से घटाया जाता है f(n,k+1)। उत्तरार्द्ध वेतन वृद्धि कश्मीर और पुनरावर्ती कॉल , इस प्रकार कश्मीर के संभावित मूल्यों पर पुनरावृत्ति । एक बार n <k + 1 या n = 1 , पुनरावृत्ति को समाप्त करते हुए 1f(n,k+1) लौटेगा ।


वाह, यह Mobius कार्यान्वयन से भी छोटा है। codegolf.stackexchange.com/a/70024/34718
mbomb007

बहुत छोटा। :) अब, वैसे भी।
डेनिस



5

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

RÆFỊNP€FS

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

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

RÆFỊNP€FS  Main link. Argument: n

R          Range; yield [1, ..., n].
 ÆF        Factor; decompose each integer in that range into prime-exponent pairs.
   Ị       Insignificant; yield 1 for argument 1, 0 for all others.
    N      Negative; map n to -n.
           This maps primes to 0, exponent 1 to -1, and all other exponents to 0.
     P€    Reduce the columns of the resulting 2D arrays by multiplication.
           The product of the prime values will always be 0; the product of the
           exponent values is 0 if any exponent is greater than, 1 if there is an
           even number of them, -1 is there is an odd number of them.
       FS  Flatten and sum, computing the sum of µ(k) for k in [1, ..., n].


3

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

Ị*%ðþÆḊ

बहुत कुशल नहीं; निर्धारक कठिन हैं।

इसे ऑनलाइन आज़माएं! या छोटे परीक्षण मामलों की पुष्टि करें । (कुछ समय लगता है)

पृष्ठभूमि

यह A002321 से एक सूत्र का उपयोग करता है :

एम (एन) बूलियन मैट्रिक्स के निर्धारक है एक × n n , जहां एक i, j है 1 अगर j = 1 या मैं | जे , और 0 अन्यथा।

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

Ị*%ðþÆḊ  Main link. Argument: n

   ð     Combine the preceding atoms into a chain (unknown arity).
         Begin a new, dyadic chain with arguments a and b.
Ị        Insignificant; return 1 iff a = 1.
  %      Compute a % b.
 *       Compute (a == 1) ** (a % b).
         This yields 1 if a = 1, or if a ≠ 1 and a % b = 0; otherwise, it yields 0.
    þ    Table; construct the matrix A by calling the defined chain for every pair
         of integers in [1, ..., n].
     ÆḊ  Compute the determinant of the resulting matrix.

3

PHP, 113 बाइट्स

for(;$i=$argv[1]--;){for($n=$j=1;$j++<$i;)if(!($i%$j)){$i/=$j;$n++;if(!($i%$j))continue 2;}$a+=$n%2?1:-1;}echo$a;

जहाँ तक मुझे पता है कि php में प्राइम नंबर की कार्यक्षमता की कमी है, तो यह एक तरह का दर्द है। शायद बेहतर करना संभव है।

जैसे उपयोग करें:

 php -r "for(;$i=$argv[1]--;){for($n=$j=1;$j++<$i;)if(!($i%$j)){$i/=$j;$n++;if(!($i%$j))continue 2;}$a+=$n%2?1:-1;}echo$a;" 10000

2

रैकेट 103 बाइट्स

(λ(N)(for/sum((n(range 1 N)))(define c(length(factorize n)))(cond[(= 0 c)0][(even? c)1][(odd? c)-1])))

Ungolfed:

(define f
  (λ(N)
    (for/sum ((n (range 1 N)))
      (define c (length (factorize n)))
      (cond
        [(= 0 c) 0]
        [(even? c) 1]
        [(odd? c) -1]))))

2

CJam (20 बाइट्स)

qiM{_,:)(@@f/{j-}/}j

ऑनलाइन डेमो

OEIS से सूत्र का उपयोग करता है

sum(k = 1..n, a([n/k])) = 1। - डेविड डब्ल्यू विल्सन, 27 फरवरी 2012

और सीजेएम के संचालक j

विच्छेदन

qi       e# Read stdin as an integer
M{       e# Memoise with no base cases
         e#   Memoised function: stack contains n
  _,:)(  e#   Basic manipulations to give n [2 .. n] 1
  @@f/   e#   More basic manipulations to give 1 [n/2 ... n/n]
  {j-}/  e#   For each element of the array, make a memoised recursive call and subtract
}j

2

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

n=>[1,...Array(n-1)].reduce((r,_,i)=>r-f(n/++i|0))

पोर्ट ऑफ @ डेनिस का पाइथन उत्तर।


2

जूलिया, 26 25 बाइट्स

!n=1-sum(map(!,n÷(2:n)))

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

पृष्ठभूमि

यह संपत्ति का उपयोग करता है

डेविड डब्ल्यू विल्सन द्वारा संपत्ति

से A002321 , निम्नलिखित पुनरावर्ती सूत्र के जो सुराग।

पुनरावर्ती सूत्र

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

हम एकजुट ऑपरेटर को फिर से परिभाषित करते हैं ! हमारे उद्देश्यों के लिए।

n÷(2:n)गणना सभी आवश्यक मरीजों, हमारे नए सिरे से परिभाषित ! उन पर मैप किया जाता है, और अंत में सभी पुनरावर्ती कॉल का योग 1 से घटाया जाता है ।

दुर्भाग्य से,

!n=1-sum(!,n÷(2:n))

काम नहीं करता है क्योंकि dyadic योग एक खाली संग्रह पर घुट जाएगा।

!n=n<2||1-sum(!,n÷(2:n))

इसे ठीक करता है, लेकिन यह किसी भी बाइट को नहीं बचाता है और इनपुट 1 के लिए सही है



1

स्काला, 53 बाइट्स

def?(n:Int,k:Int=2):Int=if(n<k)1 else?(n,k+1)- ?(n/k)

डेनिस के पाइथिन जवाब का एक बंदरगाह।

मैंने विधि को बुलाया है ?, जो एक टोकन है जो अक्षरों से नहीं चिपकता है।


1

पायथ, 12 बाइट्स

एक फ़ंक्शन को परिभाषित करता है yजो अंदर लेता है n

L-1syM/LbtSb

यहां टेस्ट सूट। (ध्यान दें कि अनुगामी yवास्तव में घोषित फ़ंक्शन को कॉल करना है।)


1

दरअसल, 18 17 16 बाइट्स

गोल्फ सुझाव का स्वागत करते हैं। इसे ऑनलाइन आज़माएं!

R`;y;l0~ⁿ)π=*`MΣ

Ungolfing

         Implicit input n.
R        Push the range [1..n].
`...`M   Map the following function over the range. Variable k.
  ;        Duplicate k.
  y        Push the distinct prime factors of k. Call it dpf.
  ;        Duplicate dpf.
  l        Push len(dpf).
  0~       Push -1.
  ⁿ        Push (-1)**len(dpf).
  )        Move (-1)**len(dpf) to BOS. Stack: dpf, k, (-1)**len(dpf)
  π        Push product(dpf).
  =        Check if this product is equal to k.
            If so, then k is squarefree.
  *        Multiply (k is squarefree) * (-1)**(length).
            If k is NOT squarefree, then 0.
            Else if length is odd, then -1.
            Else if length is even, then 1.
           This function is equivalent to the Möbius function.
Σ        Sum the results of the map.
         Implicit return.


0

जे, 19 बाइट्स

1#.1*/@:-@~:@q:@+i.

nसीमा पर मोबीउस फ़ंक्शन के योग का उपयोग करने पर मेर्टेंस फ़ंक्शन की गणना करता है [1, n]

प्रयोग

   f =: 1#.1*/@:-@~:@q:@+i.
   (,.f"0) 1 2 3 4 5 6 7 8 9 10 117 5525 7044 8888 10000
    1   1
    2   0
    3  _1
    4  _1
    5  _2
    6  _1
    7  _2
    8  _2
    9  _2
   10  _1
  117  _5
 5525   5
 7044 _25
 8888   4
10000 _23

व्याख्या

1#.1*/@:-@~:@q:@+i.  Input: integer n
                 i.  Range [0, 1, ..., n-1]
   1            +    Add 1 to each
             q:@     Get the prime factors of each
          ~:@        Sieve mask of each, 1s at the first occurrence
                     of a value and 0 elsewhere
        -@           Negate
    */@:             Reduce each using multiplication to get the product
1#.                  Convert that to decimal from a list of base-1 digits
                     Equivalent to getting the sum
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.