कितने अनूठे अपराध?


14

एक प्राकृतिक संख्या का प्रतिनिधित्व करने का एक तरीका है अभाज्य संख्याओं के गुणकों को गुणा करना। उदाहरण के लिए, 6 को 2 ^ 1 * 3 ^ 1 द्वारा दर्शाया जा सकता है, और 50 को 2 ^ 1 * 5 ^ 2 (जहां ^ घातांक इंगित करता है) द्वारा दर्शाया जा सकता है। इस निरूपण में प्राइम की संख्या यह निर्धारित करने में मदद कर सकती है कि क्या अन्य विधियों की तुलना में प्रतिनिधित्व की इस पद्धति का उपयोग करना कम है। लेकिन क्योंकि मैं हाथ से इनकी गणना नहीं करना चाहता, इसलिए मुझे इसे करने के लिए एक कार्यक्रम की आवश्यकता है। हालाँकि, क्योंकि मुझे कार्यक्रम याद रखना होगा जब तक कि मैं घर नहीं पहुँचूँ, इसे जितना संभव हो उतना छोटा होना चाहिए।

आपका कार्य:

किसी संख्या के इस निरूपण में कितने अलग-अलग अपराध हैं, यह निर्धारित करने के लिए एक कार्यक्रम या कार्य लिखें।

इनपुट:

एक पूर्णांक n ऐसा कि 1 <n <10 ^ 12, किसी भी सामान्य विधि द्वारा लिया गया।

आउटपुट:

इनपुट में प्रतिनिधित्व करने के लिए आवश्यक विभिन्न अपराधों की संख्या, जैसा कि परिचय में उल्लिखित है।

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

24      -> 2 (2^3*3^1)
126     -> 3 (2^1*3^2*7^1)
1538493 -> 4 (3^1*11^1*23^1*2027^1)
123456  -> 3 (2^6*3^1*643^1)

यह OEIS A001221 है

स्कोरिंग:

यह , बाइट्स जीत में सबसे कम स्कोर!


3
हाल ही में कई प्रमुख सवाल! मुझे यह पसंद है।
Giuseppe


3
गिरावट के पीछे का कारण इसकी तुच्छता हो सकती है। जहां तक ​​मैं देख सकता था, गोल्फिंग भाषाओं की बात आती है, तो 3 स्थितियां हैं: 1. बिल्ट-इन 2. दो बिल्ट-इन की श्रृंखला 3. 3 बिल्ट-इन की चेन (मेरे पास व्यक्तिगत रूप से तीन 2-बाइट उत्तर हैं); मैं नहीं जानता कि क्या एक
गिरावट के

1
हो सकता है, लेकिन मैं सराहना करूंगा कि यदि तीन में से एक भी मुझे बताने वाला टिप्पणी करता। हालांकि यह है गोल्फ भाषाओं में तुच्छ, वहाँ गैर गोल्फ भाषाओं में कुछ दिलचस्प समाधान है, जो लोगों को मैं देखना चाहता जब मैं इस चुनौती तैनात करना चाहता था कर रहे हैं। आखिरकार, साइट पर कई चुनौतियां हैं जो गोल्फलैंग्स के लिए तुच्छ हैं, लेकिन दिलचस्प गैर-गोल्फलैंग समाधान का उत्पादन करती हैं।
ग्राईफॉन

1
टेस्ट मामलों में प्राइम को शामिल करना फायदेमंद होगा। इसके अलावा, कुछ भाषाओं / दृष्टिकोणों को बड़ी संख्या के लिए परीक्षण करना कठिन है। कुछ छोटे परीक्षण मामले अच्छे होंगे।
डेनिस

जवाबों:


6

MATL , 4 3 बाइट्स

लुइस मेंडो के लिए -1 बाइट धन्यवाद

YFz

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

YF         Exponents of prime factors
  z        Number of nonzeros

मूल उत्तर:

Yfun

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

एक Yfunउत्तर।

          (Implicit input)
Yf         Prime factorization
  u        Unique
   n       Numel
           (Implicit output)

1
क्यों मज़ा आया? - ;-)
एडमंड

1
4 को पार किया अभी भी नियमित है 4
Gryphon

5

05AB1E , 2 बाइट्स

एक और बहुत उबाऊ जवाब ...

fg

एक पूर्ण कार्यक्रम एक संख्यात्मक इनपुट को स्वीकार करता है और परिणाम को प्रिंट करता है

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

कैसे?

fg - implicitly take input
f  - get the prime factors with no duplicates
 g - get the length
   - implicit print

5

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

PrimeNu

हाँ, एक अंतर्निहित है।

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

Length@*FactorInteger

चारों ओर लंबा रास्ता।


तारांकन के कारण क्या है? Length@FactorIntegerएक ही नहीं है?
3

1
Length@*FactorIntegerएक शुद्ध कार्य करता है: की संरचना Lengthऔर FactorInteger। मैं परिभाषित कर सकता हूं fun=Length@*FactorIntegerऔर फिर कॉल कर सकता हूं fun[1001]। दूसरी ओर, Length@FactorIntegerइसका मतलब Length[FactorInteger]और मूल्यांकन करना होगा 0
मीशा लावरोव



4

रेटिना , 31 30 बाइट्स

&`(?!(11+)\1+$)(11+)$(?<=^\2+)

इनपुट एकतरफा है।

1 बाइट गोल्फिंग के लिए @MartinEnder को धन्यवाद!

इसे ऑनलाइन आज़माएं! (इसमें दशमलव-से-एकात्मक कनवर्टर शामिल है)

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

चूंकि कार्यक्रम में &संशोधक के साथ एकल रेगेक्स होता है , रेटिना केवल अतिव्यापी मैचों की मात्रा को गिनता है । इनपुट से मिलकर माना जाता है n की पुनरावृत्ति 1 बाकी और कुछ भी नहीं।

नकारात्मक लुकहेड

(?!(11+)\1+$)

के बीच स्थानों पर मैचों 1 की कि कर रहे हैं नहीं दो या अधिक के बाद 1 के ( 11+), की एक ही राशि के एक या अधिक repetitions के बाद 1 के ( \1+), इनपुट के अंत के बाद ( $)।

किसी भी संयुक्त संख्या अब के साथ एक, b> 1 के रूप में लिखा जा सकता है की पुनरावृत्ति एक की पुनरावृत्ति 1 , इसलिए अग्रदर्शी केवल द्वारा पीछा स्थानों से मिलान कर पी की पुनरावृत्ति 1 , जहां पी = 1 या पी प्रधानमंत्री है।

रेगेक्स

(11+)$

सुनिश्चित करता है कि पी> 1 को कम से कम दो 1 'एस ( 11+) की आवश्यकता होती है और दूसरे कैप्चर ग्रुप ( ) में 1 की पूंछ को स्टोर करता है \2

अंत में, सकारात्मक लग रही है

(?<=^\2+)

सत्यापित करता है कि पूरे इनपुट में kp आवृत्तियाँ हैं ( k of 1 ) 1 , सत्यापित करता है कि p इनपुट को विभाजित करता है।

इस प्रकार, प्रत्येक मैच के लिए एक अनूठा प्रधानमंत्री भाजक से मेल खाती है पी


4

बाश + जीएनयू उपयोगिताओं, 33

  • 1 बाइट ने @ डेनिस को धन्यवाद दिया
factor|grep -Po ' \d+'|uniq|wc -l

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

व्याख्या

factor|                            # Split input into prime factors
       grep -Po ' \d+'|            # group factors onto lines
                       uniq|       # remove duplicates
                            wc -l  # count the lines

1
grep -Po ' \d+'एक बाइट बचाता है tr \ \\n|sed 1d
डेनिस

दुर्भाग्य से, grep -Po '( \d+)\1*'इनपुट 46 के लिए विफल रहता है ।
डेनिस

@ डेनिस धन्यवाद - मैंने
डिजिटल ट्रामा

3

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

एक बहुत उबाऊ जवाब ...

ÆFL

एक मोनडिक लिंक एक नंबर लेता है और एक नंबर लौटाता है

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

कैसे?

ÆFL - Link: number, n
ÆF  - prime factorisation as a list of prime, exponent pairs
  L - length

1
आपको कैसे याद किया Æv?
मेरा सर्वनाम

यह आसान था - मैंने इसके लिए कभी कोई उपयोग नहीं किया और विकी पर सूची नहीं खोजी।
जोनाथन एलन

आप परमाणुओं की सूची और क्विकस सूची के बिना जेली के पात्रों को कैसे लिखते हैं?
मेरा सर्वनाम

1. Æऑल्ट कोड 0198 है। 2. आप एक कीबोर्ड सेट कर सकते हैं (मेरे पास नहीं है)। 3. कोड पेज।
जोनाथन एलन



3

ऐलिस , 10 बाइट्स

/o
\i@/Dcd

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

व्याख्या

/o
\i@/...

यह रेखीय अंकगणित-भारी कार्यक्रमों के लिए सिर्फ मानक ढांचा है जिसे दशमलव I / O की आवश्यकता होती है। वास्तविक कार्यक्रम तो बस है:

Dcd

जो करता है:

D    Deduplicate prime factors. Does what it sounds like: for every p^k which
     is a divisor n, this divides n by p^(k-1).
c    Push the individual prime factors of n. Since we've deduplicated them
     first, the number of factors is equal to the value we're looking for.
d    Push the stack depth, i.e. the number of unique prime factors.

3

जावास्क्रिप्ट 45 बाइट्स

* @SEJPM के लिए एक स्पष्टीकरण का अनुरोध करें: यहाँ कौन सा im कर रहा है- im 2 से चल रहा है - n (जो बदलता है, और अंत में सबसे बड़ा प्रमुख कारक होगा) - अब अगर वर्तमान संख्या विभाजित करें ni इसे केवल एक बार गिनना चाहते हैं (यहां तक ​​कि हालांकि यह 2 * 2 * 2 * 3 - 2 का एक कारक हो सकता है), लेकिन इसलिए "j" चित्र के लिए आता है, जब j को फंकियन के कॉल में निर्दिष्ट नहीं किया जाता है - j का मान प्राप्त होगा " अपरिभाषित ", और जब n% i == 0 तो मैं अगले कॉल में j = 1 के साथ फ़ंक्शन को कॉल करता हूं) - और फिर मैं केवल 1 जोड़ता हूं जब j अपरिभाषित है जो समान है! j + फ़ंक्शन (n / i, i); j = 1 या सिर्फ 1))। मैं इस मामले में मुझे नहीं बदलता है क्योंकि यह अभी भी मैं फिर से (2 * 2 * 3) से विभाज्य हो सकता है, लेकिन तब j 1 के बराबर होगा और यह एक कारक के रूप में नहीं गिना जाएगा। आशा है कि मैंने इसे अच्छी तरह समझाया।

P=(n,i=2,j)=>i>n?0:n%i?P(n,i+1):!j+P(n/i,i,1)

console.log(P(1538493)==4);
console.log(P(24)==2);
console.log(P(126)==3);
console.log(P(123456)==3);

अगर अंतिम प्राइम की तुलना में बहुत बड़ा है, तो अधिकतम कॉल स्टैक होगा- यदि इसका एक मुद्दा मैं इसे एक पुनरावृत्त बना सकता है


क्या आप इस उत्तर के लिए स्पष्टीकरण लिखना चाहेंगे? यह बाकी उत्तरों से एक सामान्य दृष्टिकोण का उपयोग करने के लिए लगता है।
SEJPM

@SEJPM मैंने वहां कुछ स्पष्टीकरण दिया
डैनियलइंडी

1
FYI करें हम कोड-गोल्फ चुनौतियों के बहुमत के लिए अनंत कॉल स्टैक / अनंत संसाधन मान सकते हैं (मूल रूप से तब तक जब तक कि प्रश्न अन्यथा राज्यों में न हो)।
जोनाथन एलन

3

CJam , 7 5 बाइट्स

2 बाइट्स के लिए मार्टिन एंडर को धन्यवाद!

{mF,}

बेनामी ब्लॉक (फ़ंक्शन) जो स्टैक पर इनपुट नंबर की अपेक्षा करता है और इसे आउटपुट नंबर द्वारा बदल देता है।

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

व्याख्या

{   }   e# Define block
 mF     e# List of (prime, exponent) pairs
   ,    e# Length




2

दरअसल , 2 बाइट्स

अभी तक एक बहुत ही उबाऊ जवाब ... --- जे। एलन

yl

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

पहले चरित्र को प्रतिस्थापित किया जा सकता है w


यह पर्याप्त है, यार ...: पी
बुतपरस्त

@icrieverytim मैं वादा करता हूं कि यह मेरा आखिरी गोल्फ - लैंग्वेज का जवाब है (मेरे पास केवल 4: P है)
श्री Xcoder



2

आर + संख्या, 30 14 बाइट्स

16 बाइट्स @Giuseppe के लिए धन्यवाद हटा दिया

numbers::omega

इसके अलावा, यहाँ यह ऑनलाइन कोशिश है !! लिंक प्रति @Giuseppe


आप छोड़ सकते हैं f=function(x)और (x)जैसा numbers::omegaकि पहले से ही एक फ़ंक्शन है। हालांकि, जैसा numbersकि आर के लिए मानक नहीं है, आपको अपना जवाब "आर + नंबर" बनाना चाहिए। साथ ही, आपको एक TIO लिंक शामिल करना चाहिए । फिर भी, +1, बहुत अच्छा।
Giuseppe

@Giuseppe, आप बहुत अच्छे हैं। आपकी सहायता के लिए धन्यवाद। BTW, आपके कुछ हर्षजनक जवाबों के अलावा, मैंने सुझाव दिया कि आप सुझाव देते हैं R में गोल्फ के लिए , जैसा कि आपने सुझाव दिया था। वहां कुछ असली रत्न हैं। कुछ भी हो, मैं आपके सुझावों के साथ अपने उत्तर को अपडेट करूंगा। इसके अलावा, आपका MATLसमाधान बहुत अच्छा है (+1 कल)।
जोसेफ वुड

एनपी, अगर आपका कोई सवाल है तो मेरा चैट में जवाब दें या मेरा जवाब दें।
ग्यूसेप

@Giuseppe स्पष्ट रूप से "R + संख्या" बताने की आवश्यकता पर एक मेटा सहमति है? ऐसा लगता है कि अगर हम अतिरिक्त पैकेज का उल्लेख करते हैं तो हमें इसे स्पष्ट रूप से कॉल करने के बाइट्स को बचाने में सक्षम होना चाहिए numbers::। अन्यथा, मेरे लिए यह importकिसी अन्य भाषा में ए का उपयोग करने के समान है ।
बीएलटी

(नीचे स्क्रॉल करता है और इसका एक अजगर उदाहरण देखता है ...) मुझे लगता है कि मैं एक व्यापक मेटा सर्वसम्मति के बारे में सोच रहा हूं, फिर। यह सिर्फ मुझे मूर्खतापूर्ण लगता है।
बीएलटी



1

हास्केल , 58 बाइट्स

-4 बाइट्स @ लिकोनी को धन्यवाद

f n=sum[1|x<-[2..n],gcd x n>1,all((>)2.gcd x)[2..x-1]]

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

व्याख्या

अनिवार्य रूप से बड़े पैमाने पर सभी अपराधों को उत्पन्न करता है nऔर उन्हें n का कारक होने के लिए फ़िल्टर करता है और फिर परिणाम की लंबाई लेता है।

f n=                                                   -- main function
    sum[                                             ] -- output the length of the list
        1|x<-[2..n],                                   -- consider all potential primes <=n
                                                       -- and insert 1 into the list if predicates are satisfied
                    gcd x n>1,                         -- which are a factor of n
                              all(          )[2..x-1]  -- and for which all smaller numbers satisfy
                                  (>)2.                -- 2 being larger than
                                       gcd x           -- the gcd of x with the current smaller number

आप उपयोग कर सकते हैं sum[1|x<- ... ]के बजाय length
लैकोनी


1

ARBLE , 28 बाइट्स

len(unique(primefactors(n)))

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

यह एक बहुत ही शाब्दिक समाधान है


मैं यह देख रहा था और "अरे, एक मिनट रुको, यह एक स्निपेट है!" और फिर मैं देख रहा हूँ ... यह निहित IO के साथ एक गैर गूढ़ भाषा माना जाता है ?!
22

@icrieverytim बधाई, आपने मुख्य कारणों में से एक की खोज की है जो इस भाषा में मौजूद है।
एटीको


0

पायथन 2 ,  63  55 बाइट्स

एक और दिलचस्प जवाब ...

-8 बाइट्स जोनाथन फ्रैच के लिए धन्यवाद। प्रीमीशन के परिणाम के समायोजन के लिए डिफॉल्ट के साथ एक तर्क का उपयोग 0करें 1- एक रैपिंग लैम्ब्डा की तुलना में बेहतर - !!

f=lambda n,o=1:sum(n%i+f(i,0)<1for i in range(2,n))or o

एक पुनरावर्ती फ़ंक्शन एक सकारात्मक पूर्णांक ले रहा है n, और एक सकारात्मक पूर्णांक, गिनती लौटा रहा है।

इसे ऑनलाइन आज़माएं! वास्तव में अक्षम, अन्य परीक्षण मामलों से भी परेशान नहीं है।



@JonathanFrech धन्यवाद, यह बहुत क्लीनर है।
जोनाथन एलन

0

जे, 12 बाइट्स

{:@$@(__&q:)

q:J का प्राइम एक्सपोर्टर फ़ंक्शन है, यह तर्क देता है कि __एक मैट्रिक्स है जिसकी पहली पंक्ति सभी नॉनज़ेरो प्राइम फैक्टर हैं और जिनकी दूसरी पंक्ति इन एक्सप्लर्स है।

हम $उस मैट्रिक्स का आकार लेते हैं - कॉलम द्वारा पंक्तियाँ - स्तंभों की संख्या वह उत्तर है जो हम चाहते हैं।

{: हमें इस दो वस्तुओं (संख्या पंक्तियों, संख्या स्तंभों) की अंतिम सूची, और इसलिए उत्तर देता है।

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



0

जावास्क्रिप्ट ईएस 6, 56 वर्ण

n=>eval(`for(q=2,r=0;q<=n;++q)n%q||(n/=q,r+=!!(n%q--))`)

परीक्षा:

f=n=>eval(`for(q=2,r=0;q<=n;++q)n%q||(n/=q,r+=!!(n%q--))`)
console.log([24,126,1538493,123456].map(f)=="2,3,4,3")

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