यह संख्या कितनी है?


13

त्वचा की संख्याएं धनात्मक पूर्णांक हैं जिन्हें एक पूर्णांक x के साथ 2 2 x +1 के रूप में व्यक्त किया जा सकता है ।

आइए अब "Fermat-ness" नामक संख्या की विशेषता को परिभाषित करते हैं:

  • संख्या की Fermat-ness दो की शक्तियों की लंबाई की तुलना में कम है, जो आधार से शुरू होती है, जिसमें दो की शक्तियां विस्तारित होती हैं ताकि Fermat-ness को अधिकतम किया जा सके।
  • एक संख्या जो फ़र्मैट संख्या नहीं है, वह शून्य का फ़र्मैट-नेस है।

तो, 17 (= 2 2 2 2 0 +1) में Fermat-ness तीन हैं।

चुनौती

इनपुट के रूप में एक पॉजिटिव नॉनजरो पूर्णांक को देखते हुए, संख्या के Fermat-ness को आउटपुट करता है।

नियम

  • आप द्विआधारी, दशमलव, हेक्साडेसिमल में इनपुट को एक bignum के रूप में ले सकते हैं, या जो भी प्रारूप आपको गोल्फ को सर्वश्रेष्ठ बनाने की अनुमति देता है
  • आपका समाधान आपके द्वारा उपयोग किए जाने वाले 64 से अधिक प्रतिनिधित्व वाली बिट-लंबाई के साथ संख्याओं को संसाधित करने में सक्षम होना चाहिए।
  • केवल अप्रतिष्ठित पूर्णांक शक्तियाँ।
  • मानक कमियां निश्चित रूप से निषिद्ध हैं।
  • यह , इसलिए सबसे कम उत्तर जीतता है।

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

ये प्रारूप में हैं input->output। अंतरिक्ष को बचाने के लिए इनपुट हेक्साडेसिमल में है।

10000000000000000000000000000000000000000000000000000000000000001 -> 2
1000000000000BC00000000000000000000000000000000001000000000000001 ->0
1234567890ABCDEF -> 0
100000000000000000000000000000001 -> 1
5 -> 2
11 -> 3
10001 -> 4
101 -> 1

दशमलव में समान:

115792089237316195423570985008687907853269984665640564039457584007913129639937 -> 2
115792089237316497527923305698859709742143344804209838213621568094470773145601 -> 0
1311768467294899695 -> 0
340282366920938463463374607431768211457 -> 1
5 ->2
17 -> 3
65537 -> 4
257 -> 1

सैंडबॉक्स में अमूल्य इनपुट के लिए जियोकावल के लिए धन्यवाद ।


1
अगर मैं 1111 इनपुट करता हूं, तो आप कैसे जानते हैं कि यह द्विआधारी, दशमलव या हेक्साडेसिमल में है ???
J42161217

1
@ जेनी_मैथी का मतलब उत्तर देने वाले के लिए तय करना था कि उन्हें क्या इनपुट चाहिए।
HAEM

@ Mr.Xcoder यह सैंडबॉक्स में आया था कि वास्तव में 64 बिट्स या उससे कम के Fermat की संख्या नहीं है। मैं दावा कर रहा हूं कि सवाल आंतरिक रूप से बेंग्यूम्स के बारे में है, इसलिए मैं बिग्नम प्रोसेसिंग की मांग कर सकता हूं।
HAEM

2
@ HeikkiMäenpää याद रखें, कोई बात नहीं दूसरों की सिफारिश क्या हो सकती है, चुनौती आपकी है, और आप इसे वही बना सकते हैं जो आप चाहते हैं।
ईसैक

3
मुझे लगता है कि यह बहुत जल्दी स्वीकार है। आमतौर पर 1 या 2 सप्ताह प्रतीक्षा करें। कुछ कहते हैं कभी नहीं मानेंगे!
जियोकॉवेल

जवाबों:



1

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

n=input()-1
i=l=0
while 2**2**i<=n:
 if n==2**2**i:n=2**i;i=-1;l+=1
 i+=1
print l

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

मुझे एहसास हुआ कि बेवकूफ नहीं होने से मेरी बाइट गिनती कम होगी, इसलिए मैंने ऐसा किया। लघुगणक के विपरीत भी घातांक।


0

RProgN 2 , 75 बाइट्स

«\`n=1\]{1-\n*\]}:[»`^=«1-`n=001{]2\^2\^ne{2\^`n=1+0}{1+}?]2\^2\^n>¬}:[»`¤=

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

यह केवल 70 बाइट्स है यदि आप चरित्र «»'¤=में Fermatness गणना असाइन नहीं करते हैं ¤। यदि आप ऐसा करते हैं, तो आपको फूटर के बजाय TIO के हेडर अनुभाग में नंबर डालने की आवश्यकता होगी जैसे कि यह अब है।

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

कोड टूटने:

«\`n=1\]{1-\n*\]}:[»`^=
«                  »`^=`                            # Create a local function and assign it to the ^ character (x y ^ is x to the power of y)
 \`n=                                               # Swap the top two values of the stack and assign the new top to the variable n
     1\]                                            # Push a 1 (our starting point for x to the y), swap with the y value, then duplicate y
        {       }:                                  # Start a while loop that pops the top stack value and loops if it is truthy
         1-                                         # Subtract 1 from y to keep a tally of how many multiplications we've done
           \n*                                      # Swap the counter with our current value and multiply it by n
              \]                                    # Swap this new value with the current value of y, and duplicate it to be used as the truthy value for the loop

«1-`n=001{]2\^2\^ne{2\^`n=1+0}{1+}?]2\^2\^n>¬}:[»`¤=# The main Fermatness function (x ¤ to get the Fermatness of x)
«                                               »`¤=# Create another local function for this calculation
 1-`n=                                              # Decrement the input by 1 and assign it to n
      001                                           # Push a counter for Fermatness, a counter for calculating 2^2^i, and an initial truthy value
         {                                   }:     # Start a while loop for calculating the Fermatness
          ]2\^2\^ne                                 # Duplicate i, calculate 2^2^i, and compare it to n
                   {         }{  }?                 # Start an if statement based on the equality of 2^2^i and n
                    2\^`n=                          # n==2^2^i, so set n to 2^i (same as saying n=log_2(n))
                          1+0                       # Increment the Fermatness counter and reset i
                               1+                   # n!=2^2^i, so just increment i
                                   ]2\^2\^n>¬       # Duplicate the counter and check if 2^2^i<=n, if true the loop continues, else it exits
                                               [    # Pop i from the stack, leaving us with just the Fermatness counter

दुर्भाग्य से लॉग फ़ंक्शन Šऔर सामान्य घातांक फ़ंक्शन में ^मूल रूप से ऐसा करने के लिए सटीकता की कमी होती है, इसलिए मुझे यह फिर से परिभाषित करना पड़ा कि गुणन कैसे काम करता है क्योंकि गुणन बहुत अधिक सटीकता से करता है। उस पुनर्परिभाषित के बिना, यह उत्तर 23 बाइट्स छोटा होगा।


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