ল্যান্ডোর কার্যকারিতা গণনা করুন


19

ল্যান্ডাউ এর ফাংশন ( OEIS A000793 ) প্রতিসাম্য গ্রুপ এর একটি উপাদানটির সর্বাধিক ক্রম দেয় । এখানে, ক্রমের ক্রম ক্রম হল ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা যেমন হল পরিচয় which যা ক্রমচক্রের চক্র ক্ষয়ের মধ্যে চক্রের দৈর্ঘ্যের সর্বনিম্ন সাধারণ একাধিকের সমান। উদাহরণস্বরূপ, যা উদাহরণস্বরূপ (1,2,3) (4,5,6,7) (8,9,10,11,12,13,14) দ্বারা অর্জন করা হয়েছে।g(n)এস এন π কে π কে জি ( 14 ) = 84Snπkπkg(14)=84

সুতরাং, এর সর্বাধিক মানের সমান যেখানে সহ ধনাত্মক পূর্ণসংখ্যা রয়েছে।g(n)lcm(a1,,ak)a1++ak=na1,,ak

সমস্যা

এমন কোনও ফাংশন বা প্রোগ্রাম লিখুন যা ল্যান্ডোর কার্যকারিতা গণনা করে।

ইনপুট

একটি ধনাত্মক পূর্ণসংখ্যা ।n

আউটপুট

g(n) , প্রতিসম গ্রুপ এর একটি উপাদানের সর্বাধিক ক্রম ।Sn

উদাহরণ

n    g(n)
1    1
2    2
3    3
4    4
5    6
6    6
7    12
8    15
9    20
10   30
11   30
12   60
13   60
14   84
15   105
16   140
17   210
18   210
19   420
20   420

স্কোর

এটি : বাইট জেতে সংক্ষিপ্ততম প্রোগ্রাম। (তবুও, একাধিক ভাষায় স্বল্পতম বাস্তবায়ন স্বাগত)

দ্রষ্টব্য যে রান-টাইমের উপর আরোপিত কোনও প্রয়োজনীয়তা নেই; অতএব, আপনার বাস্তবায়ন অগত্যা যে কোনও যুক্তিসঙ্গত সময়ে উপরের সমস্ত উদাহরণ ফলাফল উত্পন্ন করতে সক্ষম হবেনা।

স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

উত্তর:



10

ওল্ফ্রাম ল্যাঙ্গুয়েজ (ম্যাথমেটিকা) , 44 বাইট

Max[PermutationOrder/@Permutations@Range@#]&

এটি অনলাইন চেষ্টা করুন!

ওল্ফ্রাম ভাষা (গণিত) , 31 বাইট

@ ড্যানিয়েলচেল্পারের আরও ভাল সমাধান রয়েছে:

Max[LCM@@@IntegerPartitions@#]&

এটি অনলাইন চেষ্টা করুন!


ভাষার সাথে পরিচিত নয় - তবে এটি Max[Apply@LCM/@IntegerPartitions@#]&আমার পক্ষে কাজ করে বলে মনে হচ্ছে এবং এটি সঠিক হলে 36 বাইট দেবে।
ড্যানিয়েল শেপলার

2
@ ড্যানিয়েলচেল্পার হ্যাঁ, সুপার! আপনি কেন এটি আলাদা সমাধান হিসাবে প্রস্তাব করবেন না? এমনকি আপনি কি করতে পারেন Max[LCM@@@IntegerPartitions@#]&জন্য 31 বাইট , কারণ @@@আছে Applyস্তর 1. এ
রোমান

4

পাইথন , 87 বাইট

f=lambda n,d=1:max([f(m,min(range(d,d<<n,d),key=(n-m).__rmod__))for m in range(n)]+[d])

এটি অনলাইন চেষ্টা করুন!

একটি পুনরাবৃত্ত ফাংশন যা বাকী nপার্টিশন এবং চলমান এলসিএম ট্র্যাক করে d। নোট করুন যে এর অর্থ আমাদের বিভাজনে আসল সংখ্যাগুলি সনাক্ত করতে হবে না বা তাদের মধ্যে আমরা কতগুলি ব্যবহার করেছি track আমরা একে সম্ভব পরবর্তী অংশ, চেষ্টা n-m, প্রতিস্থাপন nকি বাকি সঙ্গে m, এবং dসঙ্গে lcm(d,n-m)। আমরা সেই পুনরাবৃত্তির সর্বাধিক ফলাফল গ্রহণ করি এবং dনিজেই। যখন কিছুই থেকে যায় না n=0, ফলাফলটি কেবল সঠিক নয় d

জটিল জিনিসটি হচ্ছে পাইথনের এলসিএম, জিসিডি বা প্রাইম ফ্যাক্টেরাইজেশনের জন্য কোনও বিল্ট-ইন নেই। এটা করার জন্য lcm(d,m-n), আমরা এর গুণিতক একটি তালিকা জেনারেট dএবং মূল্য ন্যূনতম মডিউল অর্জনের নিতে n-mসঙ্গে যে key=(n-m).__rmod__। যেহেতু minটাই করার ক্ষেত্রে পূর্বের মানটি দেবে, তাই এটি সর্বদা প্রথম ননজারো একাধিক dযা ভাগ করে দেওয়া যায় n-mতাই তাদের এলসিএম। আমরা কেবলমাত্র এর গুণিতক dপর্যন্ত d*(n-m)LCM আঘাত নিশ্চয়তা করা, কিন্তু এটা লিখতে খাটো d<<n(যা d*2**n) যা পাইথন এর উপরের কোট একচেটিয়া হচ্ছে যথেষ্ট।

পাইথন 3 এর mathলাইব্রেরিতে 3.5 এর পরে gcd(তবে নয় lcm) রয়েছে যা কয়েকটি বাইট সংক্ষিপ্ত। আমদানি সংক্ষিপ্ত করার জন্য @ জোয়েলকে ধন্যবাদ।

পাইথন 3.5+ , 84 বাইট

import math
f=lambda n,d=1:max([f(m,d*(n-m)//math.gcd(n-m,d))for m in range(n)]+[d])

এটি অনলাইন চেষ্টা করুন!

ব্যবহার numpyএর lcmএখনো খাটো।

ন্যাপি , 77 বাইট সহ পাইথন

from numpy import*
f=lambda n,d=1:max([f(m,lcm(d,n-m))for m in range(n)]+[d])

এটি অনলাইন চেষ্টা করুন!


ব্যবহার from math import*85 বাইট হয় এবং ব্যবহার import math+ + math.gcd(...)84 বাইট। একই প্রযোজ্য numpy
জোয়েল

@ জোয়েল ধন্যবাদ, আমি সে সম্পর্কে ভুলে গেছি
এক্সএনওর

@Joel ধন্যবাদ, আমি বাইট গণনা আপডেট করতে ভুলে গিয়েছিলেন, তারা উভয় 77. numpy5 এর দৈর্ঘ্য হল বিরতি-এমনকি বিন্দু জন্য import*
এক্সএনওর

ঠিক। সেক্ষেত্রে আমি ব্যবহার করতে পছন্দ করি import numpyকারণ যদি ব্যবহৃত হয় তবে numpy.maxপাইথনের বিল্ট-ইন max(একই জন্য min) ওভাররাইড করবে from numpy import*। এটি এখানে সমস্যা তৈরি করে না তবে আমরা সকলেই জানি এটি import*সাধারণভাবে কোনও ভাল প্রোগ্রামিং অনুশীলন নয়।
জোয়েল

@ জোয়েল যদিও import*সন্দেহ নেই যে খারাপ অনুশীলন, আমি মনে করি না এটি আসলে পাইথনের ওভাররাইট করে minএবং maxতাই বিভ্রান্তি এমন কেউ হবে যে নিম্পের কার্যকারিতা প্রত্যাশা করবে এবং বেসটি পাবে।
xnor


3

জেলি , 7 বাইট

Œṗæl/€Ṁ

এটি অনলাইন চেষ্টা করুন!

একটি মোনাডিক লিঙ্ক একটি পূর্ণসংখ্যাটিকে তার যুক্তি হিসাবে গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়।

ব্যাখ্যা

Œṗ      | Integer partitions
  æl/€  | Reduce each using LCM
      Ṁ | Maximum

3

জাভাস্ক্রিপ্ট (ES6), 92 বাইট

lcm(a1,,ak)a1++akn

f=(n,i=1,l=m=0)=>n?i>n?m:f(n-i,i,l*i/(G=(a,b)=>b?G(b,a%b):a)(l,i)||i)&f(n,i+1,l)|m:m=l>m?l:m

এটি অনলাইন চেষ্টা করুন!


জাভাস্ক্রিপ্ট (ES6), 95 বাইট

f=(n,i=1,m)=>i>>n?m:f(n,i+1,i<m|(g=(n,k=2,p=0)=>k>n?p:n%k?p+g(n,k+1):g(n/k,k,p*k||k))(i)>n?m:i)

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

আমরা সংজ্ঞায়িত করি:

{g(1)=0g(n)=j=1Npjkjforn>1andn=j=1Npjkj

(এটি A008475 )

তারপরে আমরা সূত্রটি ব্যবহার করি ( A000793 থেকে ):

f(n)=maxg(k)nk


3

পার্ল 6 , 50 বাইট

{max .map:{+(.[$_],{.[@^a]}...$_,)}}o&permutations

এটি অনলাইন চেষ্টা করুন!

@ হিস্ট্রিটকের রুবি সলিউশন এর মতো সমস্ত ক্রিয়াকলাপ সরাসরি পরীক্ষা করে।

ব্যাখ্যা

                                     &permutations  # Permutations of [0;n)
{                                  }o  # Feed into block
     .map:{                       }  # Map permutations
                           ...  # Construct sequence
             .[$_]  # Start with permutation applied to itself [1]
                  ,{.[@^a]}  # Generate next item by applying permutation again
                              $_,  # Until it matches original permutation [2]
           +(                    )  # Length of sequence
 max  # Find maximum

1 আমরা চেকের জন্য স্বতন্ত্র আইটেমগুলির যে কোনও ক্রম ব্যবহার করতে পারি, তাই আমরা কেবলমাত্র আদেশটি নিজেই গ্রহণ করি।

2 যদি সমাপ্তি ...পয়েন্টার হয় তবে সিকোয়েন্স অপারেটরটি প্রথম আইটেমটির বিপরীতে স্মার্টমেট। সুতরাং আমরা একটি একক উপাদান তালিকা পাস করতে হবে।


2

রুবি , 77 বাইট

f=->n{a=*0...n;a.permutation.map{|p|(1..).find{a.map!{|i|p[i]}==a.sort}}.max}

এটি অনলাইন চেষ্টা করুন!

(1..) টিআইও-র জন্য অসীম সীমার সিনট্যাক্স খুব নতুন, তাই লিঙ্কটি একটি স্বেচ্ছাসেবী উপরের সীমাটি সেট করে।

এটি সরাসরি সংজ্ঞা ব্যবহার করে - সমস্ত সম্ভাব্য ক্রমশক্তি গণনা করুন, তারপরে প্রত্যেকে aনিজের আসল অবস্থানে ফিরে না আসা অবধি পরিবর্তন করে পরীক্ষা করুন (যার স্বাচ্ছন্দ্য বলতে আমি কেবল প্রতিটি লুপে মূল অ্যারেটি পরিবর্তন করতে পারি)।


2

গাইয়া , 25 23 22 বাইট

,:Π¤d¦&⊢⌉/
1w&ḍΣ¦¦⇈⊢¦⌉

এটি অনলাইন চেষ্টা করুন!

LCM বা পূর্ণসংখ্যা পার্টিশন না থাকা এই পদ্ধতির পরিবর্তে দীর্ঘ করে তোলে।

,:Π¤d¦&⊢⌉/		;* helper function: LCM of 2 inputs


1w&ḍΣ¦¦			;* push integer partitions
         ¦		;* for each
       ⇈⊢		;* Reduce by helper function
	  ⌉		;* and take the max


1

পাইথন 3 + নম্পি, 115 102 99 বাইট

-13 বাইটস @ ড্যানিয়েল শেপলারকে ধন্যবাদ

@ ড্যানিয়েল শেপলার থেকে আরও 3 বাইট

import numpy
c=lambda n:[n]+[numpy.lcm(i,j)for i in range(1,n)for j in c(n-i)]
l=lambda n:max(c(n))

এটি অনলাইন চেষ্টা করুন!

বর্বর বল পদ্ধতি: সমস্ত সম্ভাব্য সিকোয়েন্সগুলি a, b, c, ... সন্ধান করুন যেখানে একটি + বি + সি + ... = এন, তারপরে সর্বোচ্চ এলসিএম সহ একটি বেছে নিন।


প্রসঙ্গত, আমার কাছে পাইথন 3 + নম্পি দ্রবণটি 87 বাইটে চলমান।
ড্যানিয়েল শেপলার

কীভাবে এটি করা যায় তা নির্ধারণের জন্য আমি নাম্পের বিষয়ে পর্যাপ্ত পরিমাণে জানি না, তাই আমি প্রস্তাব দিচ্ছি যে আপনি কেবল নিজের সমাধানটি আলাদাভাবে পোস্ট করুন।
হিয়াটসু

ঠিক আছে, আমি এটি পোস্ট করার জন্য কিছুক্ষণ অপেক্ষা করার পরিকল্পনা করছিলাম।
ড্যানিয়েল শেপলার

আমি বুঝতে পেরেছি আপনি এই চ্যালেঞ্জটি পোস্ট করেছেন। দুঃখিত, আমি আমার সেরাটা করব
হিয়াটসু

1
আপনি যদি cকোনও সেট ফেরত পরিবর্তন করেন এবং মেমোয়েজ করেন তবে এটি মোটেও খারাপ কাজ করে না (যদিও স্বীকার করা এটি কিছুটা হলেও করেন না): tio.run/##RY1BCsIwEEX3PUWW11oiihV/AKEsfUTkkmIU3AWnr2Ggvq7vM@//…
ড্যানিয়েল শ্যাপিলার

0

পাইথ , 24 15 বাইট

eSm.U/*bZibZd./

এটি অনলাইন চেষ্টা করুন!

             ./Q  # List of partitions of the input
  m               # map that over lambda d:
   .U       d     # reduce d (with starting value first element of the list) on lambda b,Z:
     /*bZgbZ      # (b * Z) / GCD(b, Z)
 S                # this gives the list of lcms of all partitions. Sort this
e                 # and take the last element (maximum)

-9 বাইট: মনোযোগ দিয়েছেন এবং লক্ষ্য করেছেন যে পাইথের আসলে একটি জিসিডি বিল্টিন রয়েছে ( i)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.