মার্টেনস ফাংশনটি গণনা করুন


18

একটি ধনাত্মক পূর্ণসংখ্যা n দেওয়া হয়েছে , যেখানে Mertens ফাংশন M ( n ) এর মান গণনা করুন

Mertens

এবং μ ( ) হল Möbius ফাংশন যেখানে μ ( ) = 1 যদি স্বতন্ত্র মৌলিক উত্পাদক একজন জোড় সংখ্যা আছে, -1 যদি স্বতন্ত্র মৌলিক উত্পাদক একটি বিজোড় সংখ্যা আছে, এবং 0 যদি মৌলিক উত্পাদক না স্বতন্ত্র হয়।

  • এই তাই একটি ফাংশন বা প্রোগ্রাম একটি ইনপুট পূর্ণসংখ্যা জন্য Mertens ফাংশন নির্ণয় যে জন্য সবচেয়ে কম কোড তৈরি এন > 0।
  • এটি 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

গণিত, 22 20 বাইট

2 মাইট সংরক্ষণের জন্য @ মাইলসকে ধন্যবাদ।

Tr@*MoebiusMu@*Range

ব্যাখ্যা

Range

ইনপুট থেকে 1 টি তালিকা তৈরি করুন।

MoebiusMu

MoebiusMuপ্রতিটি সংখ্যা খুঁজুন

Tr

ফলাফলের সমষ্টি করুন।


2
আমি পছন্দ করি যে কীভাবে ম্যাথামেটিকার প্রতিটি কিছুর জন্য একটি অন্তর্নির্মিত বিষয় রয়েছে তবে এটি সাধারণত গল্ফের ভাষার চেয়ে দীর্ঘতর। = ডি
ডিজেএমসিএমহেম

5
Mthmca এর জন্য আর একটি কল, ম্যাথমেটিকার কমান্ড-নাম-দৈর্ঘ্য-অনুকূলিত সংস্করণ।
মাইকেল স্টার্ন

11

পাইথন 2, 45 37 বাইট

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

আইডিয়নে এটি পরীক্ষা করুন ।

পটভূমি

এটি সম্পত্তি ব্যবহার করে

ডেভিড ডাব্লু। উইলসনের সম্পত্তি

A002321 থেকে , যা নিম্নলিখিত পুনরাবৃত্ত সূত্রের দিকে নিয়ে যায়।

পুনরাবৃত্তি সূত্র

কিভাবে এটা কাজ করে

আমরা কেবল উদ্ধৃতিগুলির জন্য এম গণনা করতে পুনরাবৃত্তি ব্যবহার করি না , পাশাপাশি সেই চিত্রগুলির যোগফলও গণনা করতে পারি। এটি নিম্নরূপে 8 টি বাইট সংরক্ষণ করে, সরাসরি বাস্তবায়ন করে implementation

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

যখন f কে একটি একক আর্গুমেন্ট n দিয়ে ডাকা হয় , option চ্ছিক আর্গুমেন্ট k কে 2 এ ডিফল্ট করে ।

যদি এন = 1 হয় , তবে সত্যn<k ফলন হয় এবং এই মানটি প্রদান করে। এটি আমাদের বেস কেস।

যদি এন> 1 , n<kপ্রাথমিকভাবে মিথ্যা প্রদান করে এবং নিম্নলিখিত কোডটি orকার্যকর করা হয়। f(n/k)পুনরাবৃত্তির সাথে যোগফলের একটি শর্ত গণনা করে, যা এর ফেরতের মান থেকে বিয়োগ করা হয় f(n,k+1)। উত্তরোত্তর বৃদ্ধিগুলি কে এবং পুনরাবৃত্তভাবে কল করে , যাতে কে এর সম্ভাব্য মানগুলির উপর পুনরাবৃত্তি হয় । একবার এন <কে + 1 বা এন = 1 , পুনরাবৃত্তি শেষ করে 1f(n,k+1) ফিরে আসবে ।


বাহ, এটি মবিয়াস বাস্তবায়নের চেয়েও খাটো। কোডগল্ফ.স্ট্যাককেঞ্জেনজিও
70024/

অনেক খাটো। :) এখন, যাইহোক।
ডেনিস



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 এর সূত্র ব্যবহার করে :

এম (ঢ) বুলিয়ান ম্যাট্রিক্স নির্ধারক হয় একটি × এন এন , যেখানে একটি আমি, ঞ হয় 1 যদি ঞ = 1 বা আমি | j , এবং 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

পিএইচপি, 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 -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

সিজেএম (20 বাইট)

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

অনলাইন ডেমো

ওইআইএসের সূত্র ব্যবহার করে

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

জাভাস্ক্রিপ্ট (ES6), 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))

যেহেতু ডায়ডিক যোগফল খালি সংগ্রহের উপরে চাপ সৃষ্টি করবে তা কার্যকর হয় না ।

!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

আসলে, 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.

পরিসীমাতে Möbius ফাংশনের nযোগফল ব্যবহার করে Merten ফাংশনটিকে গণনা করে[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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.