पुनः प्राप्य संख्या


14

परिभाषाएं

  • यूलर फ़ि फंक्शन (AKA टोटिएंट फंक्शन ): एक फंक्शन जो एक पॉजिटिव नंबर लेता है और दिए गए नंबर से कम पॉज़िटिव नंबर देता है जो दिए गए नंबर के साथ को-प्राइम होते हैं। इसे के रूप में चिह्नित किया जाता है φ(n)

  • रीएचेबल नंबर : यदि कोई पॉजिटिव पूर्णांक मौजूद xहै φ(x) == n, तो nवह पहुंच योग्य है

कार्य

यह निर्धारित करने के लिए कि किसी दिए गए धनात्मक पूर्णांक को प्राप्य है, यह निर्धारित करने के लिए एक फ़ंक्शन / प्रोग्राम लिखें।

इनपुट

एक सकारात्मक संख्या, किसी भी उचित प्रारूप में। कोई यह मान सकता है कि संख्या भाषा की क्षमता के भीतर है। यूनरी इनपुट स्वीकार किया जाता है।

उत्पादन

दो सुसंगत मूल्य, एक पहुंच योग्य संख्याओं के लिए और दूसरा अगम्य संख्याओं के लिए। दो मूल्य कुछ भी हो सकते हैं, जब तक वे सुसंगत हैं।

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

पहुंच योग्य संख्याएं 100निम्न हैं:

1, 2, 4, 6, 8, 10, 12, 16, 18, 20, 22, 24, 28, 30, 32, 36, 40, 42, 44, 46, 48, 52, 54, 56, 58, 58 60, 64, 66, 70, 72, 78, 80, 82, 84, 88, 92, 96

( A002202 OEIS पर)

नियम

मानक खामियां लागू होती हैं।

कसौटी जीतना

यह । सबसे कम बाइट-काउंट जीत के साथ सबमिशन।

संदर्भ


यह भी प्रासंगिक: oeis.org/A264739
विनाशकारी नींबू

1
मैं एक-पंक्ति रेटिना उत्तर के लिए एक इनाम प्रदान करता हूं, जहां एक पंक्ति एक सादा रेगेक्स (कोई बैकटिक्स) नहीं है।
लीक नून

@LeakyNun मैं थोड़ा भ्रमित हूँ, अब तक मैं समझता हूँ कि phi(n) = count { m : 1 <= m <= n AND (m,n) are coprime }.. क्या यह सच है?
खालिद.के

@ खालिद.के हां, यह सच है।
लीक

जवाबों:


6

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

²RÆṪe@

बिल्कुल तेज नहीं है। 1 या 0 लौटाता है ।

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

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

²RÆṪe@  Main link. Argument: n

²       Square; yield n².
 R      Range; yield [1, ..., n²].
  ÆṪ    Compute the totient of each integer in the range.
    e@  Exists swap; test if n occurs in the generated array.

यह कैसे काम करता है?
लीक नून

1
पाशविक बल। टोटिएंट फंक्शन के लिए एक कम बाउंड है, इसलिए यह एक बड़ी पर्याप्त रेंज लेने के लिए पर्याप्त है, टोटेटिव को मैप करें, और इनपुट की घटनाओं के लिए जाँच करें।
डेनिस

क्या आप साबित कर सकते हैं कि वर्गमूल न्यूनतम है?
लीकी नून

वर्गमूल वास्तव में निचली सीमा नहीं है, लेकिन वर्गम (2) द्वारा विभाजित वर्गमूल है। मैं सकारात्मक हूं कि दोहरीकरण की आवश्यकता नहीं है, लेकिन एक प्रमाण के लिए इंतजार करना होगा जब तक कि मुझे कुछ नींद नहीं मिली। अभी बहुत थक गए हैं।
डेनिस

4
@ लीकन्यू दरअसल, इस पेपर का लेम्मा 3 साबित करता है कि वर्गमूल एक कम बाउंड है जब तक कि n = 2k से विषम k नहीं होता है । चूँकि k और 2k का समान योग है, इसलिए दोहरीकरण की आवश्यकता नहीं है।
डेनिस

6

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

EulerPhi@Range[#^2]~FreeQ~#&

डेनिस के जेली उत्तर की तरह, हम इनपुट के वर्ग तक सभी संख्याओं के elly-मानों की गणना करते हैं और देखते हैं कि इनपुट उसमें दिखाई देता है या नहीं। Falseयदि इनपुट पुन: प्राप्य है और Trueयदि यह नहीं है तो लौटाता है । हाँ, यह भ्रामक है। लेकिन FreeQएक बाइट से कम है MatchQ, और हे, कल्पना किसी भी दो लगातार मूल्यों कहा :)


2

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

लौटाता है 0या true

f=(n,x=n*2)=>x?(p=i=>(c=(a,b)=>a?c(b%a,a):b<2)(i,x)+(i&&p(--i)))(x)==n||f(n,x-1):0

यह इस धारणा पर आधारित है कि यदि x मौजूद है तो x2n । यदि गलत साबित हुआ, तो इसे (समान आकार, बहुत धीमा) के x=n*nबजाय उपयोग करने के लिए अद्यतन किया जाना चाहिए x=n*2

एक किनारे का मामला n = 128 है जिसे 255 (255) गणना करने की आवश्यकता है ।

डेमो


सुविधाजनक फर्मेट अभाज्य संख्या लगातार बढ़त मामलों के लिए सभी लगातार देने वृद्धि कर रहे हैं n=2, n=8, n=128, n=32768और n=2147483648
नील

1

Axiom, 56 बाइट्स

f(x:PI):Boolean==member?(x,[eulerPhi(i)for i in 1..2*x])

मुझे नहीं पता कि यह सही है ... परीक्षण कोड और परिणाम

(35) -> [i  for i in 1..100|f(i)]
   (35)
   [1, 2, 4, 6, 8, 10, 12, 16, 18, 20, 22, 24, 28, 30, 32, 36, 40, 42, 44, 46,
    48, 52, 54, 56, 58, 60, 64, 66, 70, 72, 78, 80, 82, 84, 88, 92, 96, 100]

सीमा 1 .. (2 * x) इनपुट x = 500 तक ठीक होगी ...




0

05AB1E , 13 12 बाइट्स

संपादित करें : यदि इनपुट में पर्याप्त तत्व नहीं हैं, तो एक बाइट सहेजा जाता है क्योंकि इनपुट का पुन: उपयोग किया जाता है।

आउटपुट 1 अगर पहुंच योग्य हो, तो 0 नहीं।

अगर यह मौजूद है कि x n 2n की धारणा पर निर्भर करता है।

xGNÕQi1,q}}0

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

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

              # implicit input    
x            # push input, 2 * input
 G           # for N in 1..2*input
             # implicit push input
  N          # push N
   Õ         # push totient of N
    Q        # check if both are equal
     i.      # if equal
      1,     # print 1
        q    # quit program
         }   # end if
          }  # end for
           0 # push 0 if condition never reached
             # implicit print

0

सी, 123 बाइट्स

g(a,b){return!a?b:g(b%a,a);}
i;r;f(n){for(i=2,r=1;i<n;i++)r+=(g(i,n)==1);}
t;k;s(m){for(k=m,t=0;!t&(k<m*m);)f(++k),t=(r==m);}

ऑनलाइन प्रयास करें

#include <stdio.h>

// gcd function
g(a,b){return!a?b:g(b%a,a);}

// Euler phi(x) function
i;r;f(n){for(i=2,r=1;i<n;i++)r+=(g(i,n)==1);}

// check if m is reachable, phi(x) for x in (m , m^2]
t;k;s(m){for(k=m,t=0;!t&(k<m*m);)f(++k),t=(r==m);}

main()
{
    // print all reachable number below 50
    for(int x=1; x<50; x++)
    {
        s(x);

        if(t)
        {
            printf(" %d ~ phi(%d) \n", x, k);
        }
    }
}

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