यूलर के फंक्शनिएंट फ़ंक्शन की गणना करें


27

पृष्ठभूमि

यूलर totient समारोह φ(n)की तुलना में कम पूर्ण संख्याओं की संख्या के रूप में परिभाषित या के बराबर है nकि अपेक्षाकृत करने के लिए प्रधानमंत्री हैं n, यह है कि, के संभावित मानों की संख्या xमें 0 < x <= nजिसके लिए gcd(n, x) == 1। हम लिया है एक कुछ totient - संबंधित चुनौतियों से पहले, लेकिन कभी नहीं एक जो सिर्फ यह गणना कर रहा है।

पूरे नंबरों पर कुल फ़ंक्शन का मानचित्रण OEIS A000010 है

चुनौती

एक पूर्णांक को देखते हुए n > 0, गणना करें φ(n)। आप कमांड-लाइन तर्कों, मानक इनपुट, फ़ंक्शन तर्कों, या किसी अन्य चीज़ के माध्यम से इनपुट ले सकते हैं। आप मानक आउटपुट, रिटर्न मान या कुछ और उचित माध्यम से आउटपुट दे सकते हैं। अनाम कार्य स्वीकार्य हैं। आप मान सकते हैं कि इनपुट पूर्णांक को संग्रहीत करने की आपकी प्राकृतिक विधि को ओवरफ्लो नहीं करेगा, जैसे intC में, लेकिन आपको 255 तक के इनपुट का समर्थन करना चाहिएयदि आपकी भाषा में एक अंतर्निहित योग फ़ंक्शन है, तो आप इसका उपयोग नहीं कर सकते।

उदाहरण

φ(1) => 1
φ(2) => 1
φ(3) => 2
φ(8) => 4
φ(9) => 6
φ(26) => 12
φ(44) => 20
φ(105) => 48

बाइट्स जीत में सबसे छोटा जवाब। यदि आपकी भाषा UTF-8 के अलावा किसी एन्कोडिंग का उपयोग करती है, तो अपने उत्तर में इसका उल्लेख करें।


4
वैसे वहाँ था इस दूसरे दिन। मुझे नहीं लगता कि बार-बार किए गए आवेदन से पर्याप्त अंतर पड़ता है, लेकिन अगर कुछ भी मैं दूसरे को बंद कर दूंगा, क्योंकि मुझे नहीं लगता कि दोहराया आवेदन कुछ भी जोड़ता है। उस ने कहा, इससे भी बड़ा अंतर यह है कि एक बिल्ट-इन की अनुमति है और यह एक नहीं है।
मार्टिन एंडर

जाहिरा तौर पर बिल्ट-इन को अस्वीकार करने से उत्तरों पर कोई प्रभाव नहीं पड़ता है।
जूली पेलेटियर

2
@JuliePelletier ऐसा क्यों है? मेरा गणितज्ञ उत्तर अन्यथा 19 बाइट्स छोटा होता:EulerPhi
मार्टिन एंडर

@JuliePelletier GCD को अनुमति दी गई है क्योंकि GCD की गणना करना हल करने के लिए अपेक्षित समस्या नहीं है। निश्चित रूप से, यह इन उत्तरों पर बाइट की गिनती को टक्कर दे सकता है, लेकिन यह चुनौती को बेहतर नहीं बनाता है। मैं स्पष्ट करने के लिए संपादित करूँगा।
bulul

जवाबों:


13

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

Range@#~GCD~#~Count~1&

एक अनाम फ़ंक्शन जो पूर्णांक लेता और वापस करता है।

यहाँ समझाने के लिए बहुत कुछ नहीं है, सिवाय इसके कि @फ़ंक्शन कॉल के लिए उपसर्ग संकेतन है और ~...~(बाएं-सहयोगी) infix संकेतन है, इसलिए ऊपर जैसा है:

Count[GCD[Range[#], #], 1] &

11

MATL, 7 बाइट्स

t:Zd1=s

आप TryItOnline कर सकते हैं । सबसे सरल विचार, एन 1 से एक वेक्टर बनाते हैं, और एन ( Zdजीसीडी) के साथ प्रत्येक तत्व का जीसीडी लेते हैं। फिर, यह पता लगाएं कि कौन से तत्व 1 के बराबर हैं, और उत्तर प्राप्त करने के लिए वेक्टर का योग करें।


बिलियन _Zpसोच रखने वालों के लिए है।
डेविड

10

जे, 9 बाइट्स

(-~:)&.q:

यह टोटके फंक्शन्स पर Jsoftware के निबंध पर आधारित है।

यह देखते हुए n = पी 1 1पी 2 2 ∙∙∙ पी कश्मीर कश्मीर जहां पी कश्मीर का एक प्रमुख कारक है n , totient समारोह φ ( एन ) = φ ( पी 1 1 ) ∙ φ ( पी 2 2 ) (φ ( पी के के ) = ( पी 1 - 1) पी 1 1 - 1 ∙ ( पी 2 - 1) पी 22 - 1 2 ( पी के - 1) पी के के - 1

प्रयोग

   f =: (-~:)&.q:
   (,.f"0) 1 2 3 8 9 26 44 105
  1  1
  2  1
  3  2
  8  4
  9  6
 26 12
 44 20
105 48
   f 12345
6576

व्याख्या

(-~:)&.q:  Input: integer n
       q:  Prime decomposition. Get the prime factors whose product is n
(   )&     Operate on them
  ~:         Nub-sieve. Create a mask where 1 is the first occurrence
             of a unique value and 0 elsewhere
 -           Subtract elementwise between the prime factors and the mask
     &.q:  Perform the inverse of prime decomposition (Product of the values)

तथ्य यह है कि पुनरावृत्ति का उपयोग कर जम्मू में एक और समाधान बनाने के लिए गुणक गुणक है :)
लीक नॉन

@LeakyNun मुझे नहीं लगता कि फैक्टरिंग को गोल करने का एक आसान तरीका है, क्योंकि पुनरावृत्त रूप [:*/@({.(^-(^<:)){:)2&p:का उपयोग करने के लिए भी 24 बाइट्स की आवश्यकता होती है, यहां तक कि प्रिंसेस और उनके एक्सपोर्टरों को प्राप्त करने के लिए बिलिन का उपयोग करना । या शायद वहाँ एक छोटा रास्ता है और मैं इसे नहीं देखता।
मील


7

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

f n=sum[1|1<-gcd n<$>[1..n]]

स्थिरांक के हास्केल पैटर्न मिलान का उपयोग करता है । यहां ट्रिक्स गोल्फिंग के लिए काफी मानक हैं, लेकिन मैं एक सामान्य दर्शक को समझाऊंगा।

अभिव्यक्ति gcd n<$>[1..n]नक्शे gcd nपर [1..n]। दूसरे शब्दों में, यह गणना करता है gcdके साथ nसे प्रत्येक संख्या का 1करने के लिए n:

[gcd n i|i<-[1..n]]

यहां से, वांछित आउटपुट 1प्रविष्टियों की संख्या है , लेकिन हास्केल में countफ़ंक्शन का अभाव है । filterकेवल रखने के लिए मुहावरेदार तरीका 1, और इसके परिणामस्वरूप length, जो कि बहुत अधिक है गोल्फ के लिए लंबा है।

इसके बजाय, परिणामी सूची के साथ filterएक सूची समझ से प्रेरित है । आमतौर पर, सूची समझ में आने वाले चर पर मानों को बांधती है, लेकिन हास्केल एक पैटर्न के खिलाफ मिलान करने की अनुमति देता है, इस मामले में स्थिर ।[1|1<-l]l[x*x|x<-l]1

तो, [1|1<-l]एक पैदा करने 1से प्रत्येक मैच पर 1, प्रभावी रूप से बस निकालने 1मूल सूची की है। इस पर कॉल sumकरने से इसकी लंबाई मिल जाती है।


मुझे लगता है कि यह पहला हास्केल उत्तर है जिसे मैं वास्तव में समझता हूं। यह इतनी अच्छी भाषा है, लेकिन यह अन्य लोगों से बहुत अलग है।
bulul

वाह, मुझे उम्मीद थी कि पैटर्न मिलान मिलान की सूचियों में विस्तृत होना चाहिए। ट्रिक के लिए धन्यवाद।
डेमियन

7

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

f=lambda n,d=1:d/n or-f(d)*(n%d<1)-~f(n,d+1)

कम गोल्फ वाला:

f=lambda n:n-sum(f(d)for d in range(1,n)if n%d<1)

उस सूत्र का उपयोग करता है जो यूलर के भाजकों का कुल nयोग है n:

यहाँ छवि विवरण दर्ज करें

तब के मूल्य को ϕ(n)पुन: अभिकलित किया जा सकता है, क्योंकि यह nऋणात्मक विभाजकों का योग है। प्रभावी रूप से, यह पहचान समारोह पर मोबीस उलटा कर रहा है । मैंने Möbius फ़ंक्शन की गणना करने के लिए एक गोल्फ में एक ही विधि का उपयोग किया

एक बेहतर आधार मामले से 1 बाइट बचत, का प्रारंभिक मूल्य के प्रसार के लिए डेनिस के लिए धन्यवाद +nमें +1से प्रत्येक के लिए nछोरों, के रूप में किया -~



5

जे, 11 बाइट्स

+/@(1=+.)i.

प्रयोग

>> f =: +/@(1=+.)i.
>> f 44
<< 20

जहाँ >>STDIN है और <<STDOUT है।

व्याख्या

+/ @ ( 1 = +. ) i.
               │
   ┌───────────┴┐
 +/@(1=+.)      i.
   │
 ┌─┼──┐
+/ @ 1=+.
    ┌─┼─┐
    1 = +.

>> (i.) 44            NB. generate range
<< 0 1 2 3 4 ... 43
>> (+.i.) 44          NB. calculate gcd of each with input
<< 44 1 2 1 4 ... 1
>> ((1=+.)i.) 44      NB. then test if each is one (1 if yes, 0 if no)
<< 0 1 0 1 0 ... 1
>> (+/@(1=+.)i.) 44   NB. sum of all the tests
<< 20

आपको ऊर्ध्वाधर पेड़ का प्रतिनिधित्व कैसे मिला? मैंने सोचा कि यह केवल क्षैतिज उत्पादन किया है।
मील

@ मीलों मैंने खुद इसे टाइप किया।
लीक नून

5

पायथन> = 3.5, 76 64 58 बाइट्स

बाइट्स के लिए 12 (!) बंद करने के लिए LeakyNun को धन्यवाद।

6 बाइट्स बंद करने के लिए Sp3000 के लिए धन्यवाद।

import math
lambda n:sum(math.gcd(n,x)<2for x in range(n))

मुझे प्यार है कि पायथन कितना पठनीय है। यह समझ में आता है, यहां तक ​​कि गोल्फ के माध्यम से भी।


1
lambda n:sum(gcd(n,x)<2for x in range(n))
लीक नून

ओह, अजगर आखिरकार gcdगणित मॉड्यूल में जुड़ गया! मैं यह नहीं जानता था।
रबिक

5

रेगेक्स (ECMAScript), 131 बाइट्स

डेडकोड ​​(चैट में) के लिए कम से कम -12 बाइट्स धन्यवाद

(?=((xx+)(?=\2+$)|x+)+)(?=((x*?)(?=\1*$)(?=(\4xx+?)(\5*(?!(xx+)\7+$)\5)?$)(?=((x*)(?=\5\9*$)x)(\8*)$)x*(?=(?=\5$)\1|\5\10)x)+)\10|x

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

आउटपुट मैच की लंबाई है।

ECMAScript regexes कुछ भी गिनना बेहद कठिन बनाता है। लूप के बाहर परिभाषित कोई भी बैकएप लूप के दौरान स्थिर रहेगा, लूप के अंदर परिभाषित किसी भी बैकड्रॉप को लूप करते समय रीसेट किया जाएगा। इस प्रकार, लूप पुनरावृत्तियों में राज्य ले जाने का एकमात्र तरीका वर्तमान मैच की स्थिति का उपयोग कर रहा है। यह एक पूर्णांक है, और यह केवल घट सकता है (ठीक है, स्थिति बढ़ जाती है, लेकिन पूंछ की लंबाई कम हो जाती है, और यही हम गणित कर सकते हैं)।

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

यहाँ यह छद्मकोड में कैसा दिखता है:

N = input
Z = largest prime factor of N
P = 0

do:
   P = smallest number > P that’s a prime factor of N
   N = N - (N / P)
while P != Z

return N

इस बारे में दो संदिग्ध बातें हैं।

सबसे पहले, हम केवल वर्तमान उत्पाद को इनपुट नहीं बचाते हैं, तो हम इनपुट के प्रमुख कारकों को कैसे प्राप्त कर सकते हैं? चाल यह है कि (एन - (एन / पी)) के समान प्रमुख कारक हैं> पी के रूप में एन। यह नए प्रमुख कारकों को प्राप्त कर सकता है <पी, लेकिन हम वैसे भी अनदेखा करते हैं। ध्यान दें कि यह केवल इसलिए काम करता है क्योंकि हम छोटे से लेकर सबसे बड़े तक के प्रमुख कारकों पर पुनरावृत्ति करते हैं, दूसरे रास्ते पर जाना विफल हो जाएगा।

दूसरा, हमें लूप पुनरावृत्तियों में दो संख्याएँ याद रखनी हैं (P और N, Z की गिनती नहीं है क्योंकि यह निरंतर है), और मैंने सिर्फ इतना कहा कि यह असंभव था! शुक्र है कि हम उन दो नंबरों को एक ही में बदल सकते हैं। ध्यान दें कि, लूप की शुरुआत में, N हमेशा Z का एक गुणक होगा, जबकि P हमेशा Z से कम रहेगा। इस प्रकार, हम सिर्फ N + P को याद रख सकते हैं, और P को मोडुलो के साथ निकाल सकते हैं।

यहाँ थोड़ा और विस्तृत छद्म कोड है:

N = input
Z = largest prime factor of N

do:
   P = N % Z
   N = N - P
   P = smallest number > P that’s a prime factor of N
   N = N - (N / P) + P
while P != Z

return N - Z

और यहाँ टिप्पणी regex है:

# \1 = largest prime factor of N
# Computed by repeatedly dividing N by its smallest factor
(?= ( (xx+) (?=\2+$) | x+ )+ )

(?=
        # Main loop!
        (
                # \4 = N % \1, N -= \4
                (x*?) (?=\1*$)

                # \5 = next prime factor of N
                (?= (\4xx+?) (\5* (?!(xx+)\7+$) \5)? $ )

                # \8 = N / \5, \9 = \8 - 1, \10 = N - \8
                (?= ((x*) (?=\5\9*$) x) (\8*) $ )

                x*
                (?=
                        # if \5 = \1, break.
                        (?=\5$) \1
                |
                        # else, N = (\5 - 1) + (N - B)
                        \5\10
                )
                x
        )+
) \10

और एक बोनस के रूप में…

रेगेक्स (ECMAScript 2018, मैचों की संख्या), 23 बाइट्स

x(?<!^\1*(?=\1*$)(x+x))

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

आउटपुट मैचों की संख्या है। ECMAScript 2018 वेरिएबल-लेंथ लुक-बैक (मूल्यांकित राइट-टू-लेफ्ट) का परिचय देता है, जो इनपुट के साथ सभी संख्याओं को कॉपी करना संभव बनाता है।

यह पता चलता है कि यह स्वतंत्र रूप से लीकी नून के रेटिना समाधान द्वारा उपयोग की जाने वाली विधि है , और रेगेक्स भी समान लंबाई ( और विनिमेय ) है। मैं इसे यहां छोड़ रहा हूं क्योंकि यह रुचि का हो सकता है कि यह विधि ECMAScript 2018 (और न केवल .NET) में काम करती है।

                        # Implicitly iterate from the input to 0
x                       # Don’t match 0
 (?<!                 ) # Match iff there is no...
                 (x+x)  # integer >= 2...
         (?=\1*$)       # that divides the current number...
     ^\1*               # and also divides the input

4

पर्ल 6 ,  26 24  22 बाइट्स

{[+] (^$^n Xgcd $n) X== 1}
{+grep 2>*,(^$_ Xgcd$_)}
{[+] 2 X>(^$_ Xgcd$_)}

स्पष्टीकरण:

{
  [+] # reduce using &infix:<+>
    2
    X[>] # crossed compared using &infix:«>»
    (
      ^$_    # up to the input ( excludes input )
      X[gcd] # crossed using &infix:<gcd>
      $_     # the input
    )
}

उदाहरण:

#! /usr/bin/env perl6
use v6.c;

my  = {[+] 2 X>(^$_ Xgcd$_)};

say φ(1) # 1
say φ(2) # 1
say φ(3) # 2
say φ(8) # 4
say φ(9) # 6
say φ(26) # 12
say φ(44) # 20
say φ(105) # 48

say φ 12345 # 6576


4

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

!n=sum(i->gcd(i,n)<2,1:n)

यह सरल है - sumफ़ंक्शन आपको समन से पहले आवेदन करने के लिए एक फ़ंक्शन देने की अनुमति देता है - मूल रूप से चलने के बराबर mapऔर फिर sum। यह सीधे अपेक्षाकृत अभाज्य संख्याओं की संख्या को कम से कम गिनता है n


4

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

f=lambda n,k=1,m=1:n*(k>n)or f(n-(n%k<m%k)*n/k,k+1,m*k*k)

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

पृष्ठभूमि

द्वारा यूलर उत्पाद सूत्र ,

यूलर के उत्पाद सूत्र

जहां φ यूलर के क्षणिक कार्य को दर्शाता है और p केवल अभाज्य संख्याओं पर भिन्न होता है।

Primes की पहचान करने के लिए, हम विल्सन के प्रमेय के एक कोरोलरी का उपयोग करते हैं :

विल्सन की प्रमेय की कोरोलरी

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

हर समय, चर m k - 1 के भाज्य के वर्ग के बराबर होगा । वास्तव में, हमने तर्कों को डिफ़ॉल्ट रूप से k = 1 और m = 0 का नाम दिया है! 2 = 1

जब तक k , n , 0 काn*(k>n) मूल्यांकन करता है और निम्नलिखित कोड निष्पादित हो जाता है।or

याद है कि 1m%k उपज होगा अगर मी प्रधानमंत्री है और 0 यदि नहीं। इसका मतलब यह है कि यदि केवल k एक अभाज्य संख्या है और x , k से विभाज्य है, तो यह सही होगा ।x%k<m%k

इस स्थिति में, n / k(n%k<m%k)*n/k उपज देता है , और n से घटाकर इसके पिछले मान को n (1 - 1 / k) से बदल देता है , जैसा कि Euler के उत्पाद सूत्र में है। अन्यथा, 0 और n पैदावार अपरिवर्तित रहती है।(n%k<m%k)*n/k

इसके बाद के संस्करण की गणना के बाद, हम वेतन वृद्धि k और गुणा मीटर की "पुराने" मूल्य से कश्मीर 2 , इस प्रकार के बीच वांछित संबंध बनाए रखने कश्मीर और मीटर , तो फोन रिकर्सिवली अद्यतन तर्क के साथ।

एक बार जब कश्मीर से अधिक है n , n*(k>n)करने के लिए मूल्यांकन करता है n , जो समारोह द्वारा दिया जाता है।


4

रूबी, 32 बाइट्स

->n{(1..n).count{|i|i.gcd(n)<2}}

एक लैम्ब्डा जो एक पूर्णांक n लेता है, और सीमा में कितने पूर्णांकों की गणना करता है (1..n) n के साथ मैथुन करता है।


नमस्कार, और PPCG में आपका स्वागत है! यह एक बेहतरीन पहली पोस्ट है।
NoOneIsHere

प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है! यह एक महान पहला उपाय है, इसे बनाए रखें!
बिकुल

धन्यवाद, वास्तव में यह छोटा नहीं है, मुझे आश्चर्य है कि अगर इसे सुधारना संभव है।
रेड्यूने रेड

3

ब्रेकीलॉग , 25 बाइट्स

:{:1e.$pdL,?$pd:LcCdC}fl.

व्याख्या

Brachylog का अभी तक कोई GCD अंतर्निहित नहीं है, इसलिए हम जांचते हैं कि दोनों संख्याओं के सामान्य रूप में कोई प्रमुख कारक नहीं हैं।

  • मुख्य विधेय:

    :{...}fl.             Find all variables which satisfy predicate 1 when given to it as
                          output and with Input as input.
                          Unify the Output with the length of the resulting list
    
  • 1 समर्पित करें:

    :1e.                  Unify Output with a number between Input and 1
        $pdL              L is the list of prime factors of Output with no duplicates
            ,
             ?$pd:LcC     C is the concatenation of the list of prime factors of Input with
                          no duplicates and of L
                     dC   C with duplicates removed is still C
    


3

PowerShell v2 +, 72 बाइट्स

param($n)1..$n|%{$a=$_;$b=$n;while($b){$a,$b=$b,($a%$b)};$o+=!($a-1)};$o

PowerShell के पास इसके लिए GCD फ़ंक्शन उपलब्ध नहीं है, इसलिए मुझे अपना स्वयं का रोल करना पड़ा।

इस इनपुट लेता है $n, तो पर्वतमाला 1के लिए $nऔर पाइप एक पाश में उन |%{...}। प्रत्येक यात्रा हम दो सहायक चर सेट $aऔर $bऔर फिर एक GCD निष्पादित whileपाश। प्रत्येक यात्रा हम चाहते हैं कि जाँच कर रहे हैं $bअभी भी गैर-शून्य है, और उसके बाद की बचत $a%$bकरने के लिए $bऔर के पिछले मूल्य $bके लिए $aअगले पाश के लिए। हम तब जमा करते हैं कि क्या हमारे आउटपुट चर में $aबराबर है । एक बार जब लूप किया जाता है, तो हम पाइप लाइन पर रख देते हैं और आउटपुट निहित होता है।1$o$o

whileलूप कैसे काम करता है, इस पर एक उदाहरण के रूप में , विचार करें $n=20और हम पर हैं $_=8। पहला चेक है $b=20, इसलिए हम लूप में प्रवेश करते हैं। हम पहले गणना करते हैं $a%$bया 8%20 = 8, जो $bउसी समय पर सेट हो जाता है जो सेट 20हो जाता है $a। जांचें 8=0, और हम दूसरी पुनरावृत्ति दर्ज करते हैं। हम फिर गणना करते हैं 20%8 = 4और $bफिर सेट $aकरते हैं 8। जाँच करें 4=0, और हम तीसरी पुनरावृत्ति दर्ज करते हैं। हम गणना करते हैं 8%4 = 0और $bउसके बाद सेट $aकरते हैं 4। चेक करें 0=0और हम लूप से बाहर निकलते हैं, इसलिए जीसीडी (8,20) है $a = 4। इस प्रकार, !($a-1) = !(4-1) = !(3) = 0इसलिए $o += 0और हम उस एक की गिनती नहीं करते हैं।


3

फैक्टर, 50 बाइट्स

[ dup iota swap '[ _ gcd nip 1 = ] filter length ]

एक रेंज ( iota ) n बनाता है , और एक फ़ंक्शन में n करी करता है, जो 0 <= x <= n के सभी मानों के लिए gcd xn प्राप्त करता है , यदि परिणाम 1 है तो परीक्षण करता है । इस पर मूल सीमा को फ़िल्टर करें कि क्या gcd xn का परिणाम 1 था , और इसकी लंबाई लें


[ dup iota swap '[ _ gcd nip 1 = ] map sum ]6 बाइट्स बचाता है (मुझे लगता है - फैक्टर के साथ बहुत अनुभवी नहीं है)।
बकल

@bkul सुझाव के लिए धन्यवाद! : डी दुर्भाग्य से, t/fफैक्टर में संख्याओं और (प्रतीकों) के बीच कोई अनुकूलता नहीं है , इसलिए इसे लागू करने का एकमात्र तरीका [ dup iota swap '[ _ gcd nip 1 = 1 0 ? ] map sum ]वर्तमान समाधान के समान सटीक लंबाई है।
बिल्ली

आह, खतरा। मजबूत टाइपिंग फिर से हमले।
1

@bkul ठीक है, मैं मजबूत टाइपिंग के लिए और आभारी हूँ TYPED:में वास्तविक फैक्टर कोड: पी
बिल्ली


2

रेटिना, 36 29 बाइट्स

मार्टिन एंडर को 7 बाइट्स धन्यवाद।

.+
$*
(?!(11+)\1*$(?<=^\1+)).

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

व्याख्या

दो चरण (कमांड) हैं।

पहला चरण

.+
$*

यह एक सरल रेगेक्स प्रतिस्थापन है, जो कई लोगों को इनपुट परिवर्तित करता है।

उदाहरण के लिए, में 5परिवर्तित किया जाएगा 11111

दूसरे चरण

(?!(11+)\1*$(?<=^\1+)).

यह रेगेक्स उन स्थितियों से मेल खाने की कोशिश करता है जो स्थिति को संतुष्ट करते हैं (इनपुट के साथ सह-प्रधान), और फिर मैचों की संख्या वापस करते हैं।


जब तक एक लुकहेड के अंदर नहीं दिखता है तब तक लुकबाइंड नहीं होता है?
लीक नून

लुकरॉइड्स सामान्य रूप से पीछे नहीं हटते हैं।
मार्टिन एंडर

फिर ऐसा कैसे है कि रेगेक्स ने प्रत्येक भाजक का परीक्षण किया?
लीके नन

1
खैर वे कर घटाता तक आप उन्हें छोड़ कर मत के रूप में। जब तक इंजन लुकअराउंड के अंदर होता है, तब तक वह लुकअप मैच बनाने के लिए हर संभव कोशिश करेगा (या नकारात्मक बदलाव के मामले में असफल)। लेकिन एक बार जब लुकअप पास हो जाता है, तो इंजन इसमें पीछे नहीं हटेगा यदि इसके बाद कुछ भी विफल हो जाता है (जब तक कि यह तब लुकअराउंड के सामने चीजों को पीछे करने के लिए शुरू नहीं होता है और वैसे भी सब कुछ का पुनर्मूल्यांकन करना पड़ता है)।
मार्टिन एंडर

2

आम लिस्प, 58 बाइट्स

(defun o(x)(loop for i from 1 to x if (=(gcd x i)1)sum 1))

यह एक साधारण लूप है, जो दिए गए n में 1 को गिनता है और अगर gcd = 1. का योग बढ़ाता है, तो मैं फ़ंक्शन नाम का उपयोग करता हूं क्योंकि t सच बूलियन मान है। लगभग सबसे छोटा नहीं बल्कि काफी सरल।


क्या CL में किसी प्रकार का अनाम फ़ंक्शन नहीं है?
बिल्ली

2

MATLAB / ऑक्टेव, 21 बाइट्स

@(n)sum(gcd(n,1:n)<2)

एक अनाम फ़ंक्शन बनाता ansहै जिसे nकेवल इनपुट के रूप में पूर्णांक के साथ बुलाया जा सकता है :ans(n)

ऑनलाइन डेमो


2

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

lambda n:sum(k/n*k%n>n-2for k in range(n*n))

यह मेरे उत्तर के रूप में "उत्तर तक Coprimes" के रूप में coprimes की पहचान करने के लिए एक ही विधि का उपयोग करता है ।

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


1
के साथ, मैं देख रहा हूँ, के n-1बजाय एक उत्पाद के लिए जाँच का मामूली समायोजन 1, जो इसे काम करता है n==1
अर्जन जोहानसन


1

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

;╗R`╜g`M1@c

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

व्याख्या

;╗R`╜g`M1@c   register stack             remarks

                       44
;                      44 44
 ╗            44       44
  R           44       [1 2 3 .. 44]
       M      44       10                for example
    ╜         44       10 44
     g        44       2
              44       [1 2 1 .. 44]     gcd of each with register
        1     44       [1 2 1 .. 44] 1
         @    44       1 [1 2 1 .. 44]
          c   44       20                count

बिल्ट-इन के साथ

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


आप वैकल्पिक रूप ;╗R`╜g1=`MΣसे उसी बाइट की गिनती के लिए उपयोग कर सकते हैं
मेगो

1

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

f=n=>[...Array(n)].reduce(r=>r+=g(n,++i)<2,i=0,g=(a,b)=>b?g(b,a%b):a)

1

05AB1E, 7 बाइट्स

Lvy¹¿i¼

व्याख्या की

Lv        # for each x in range(1,n)
  y¹¿     # GCD(x,n)
     i¼   # if true (1), increase counter
          # implicitly display counter

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


संभवतः यह तब संभव नहीं था जब आपने इसे पोस्ट किया था, लेकिन अब कुछ 5-बायर्स संभव हैं L€¿1¢:; Lʒ¿}g; L€¿ΘO
केविन क्रूज़सेन

1

एपीएल, 7 बाइट्स

+/1=⊢∨⍳

यह एक मोनडिक फ़ंक्शन ट्रेन है जो दाईं ओर पूर्णांक लेती है। यहाँ दृष्टिकोण स्पष्ट एक है: योग ( +/) इनपुट की जीसीडी की संख्या और 1 से इनपुट तक की संख्या ( ⊢∨⍳) 1 के बराबर है ( 1=)।

इसे यहाँ आज़माएँ


1

हास्केल, 31 30 बाइट्स

\n->sum[1|x<-[1..n],gcd n x<2]

1 बाइट बच गई, @Damien की बदौलत।

Gcd = 1 के साथ मानों का चयन करता है, प्रत्येक से 1 में मैप करता है, फिर योग लेता है।


आप की जगह ले सकता ==1द्वारा<2
डेमियन

1

बैच, 151 145 144 बाइट्स

@echo off
set t=
for /l %%i in (1,1,%1)do call:g %1 %%i
echo %t%
exit/b
:g
set/ag=%1%%%2
if not %g%==0 call:g %2 %g%
if %2%==1 set/at+=1

संपादित करें: अनावश्यक रिक्त स्थान को हटाकर 4 बाइट्स सहेजे गए। का उपयोग करके 1 बाइट को बचाया +=। के tरूप में समाशोधन करके 1 बाइट को बचाया +=कि 0वैसे भी व्याख्या करेगा । @ EʀɪᴋᴛʜᴇG 1 को 1 बाइट धन्यवाद दिया गया।

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