3 के 10-एडिक क्यूब रूट का पता लगाएं


24

मैं एक संख्या के रूप में 10-एडिक संख्या के बारे में सोचना पसंद करता हूं जो कि बाईं ओर असीम रूप से चलती है, या एक पूर्णांक 10 की एक बहुत बड़ी शक्ति है।

चीजें अनंत रूप से बाईं ओर ले जाती हैं और लुप्त हो जाती हैं। यह देखने के लिए कि मेरा क्या मतलब है, ध्यान दें कि ...6667 * 3 = 110-एडिक भूमि में, "2" के बाद से जो बाईं ओर किया जाता है, अनंत तक जाता है।

जोड़ और गुणा 10-एडिक संख्या के लिए समझ में आता है, क्योंकि nयोग / उत्पाद के अंतिम nअंक केवल सारांश / गुणक के अंतिम अंकों पर निर्भर करते हैं ।


यह देखते हुए n, आपको n3 के 10-एडिक क्यूब रूट के अंतिम अंकों को प्रिंट करने की आवश्यकता है , अर्थात xसंतोषजनक x*x*x = 3

खत्म होता है:

...878683312291648481630318492665160423850087895134587

आपका कोड n=1000सबमिट करने से पहले समाप्त होना चाहिए ।

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


यह । बाइट्स जीत में सबसे छोटा जवाब।



1
क्या हमें अग्रणी शून्य को भी प्रिंट करने की आवश्यकता है? अधिकांश उत्तर (मेरे जावा उत्तर सहित) वर्तमान में उन लोगों के लिए विफल हो रहे हैं। यानी के बजाय n=12outputting । व्यक्तिगत रूप से मैं इसे वैकल्पिक 87895134587087895134587
बनाऊंगा

@ केविनक्रूजसेन ने किया
नन

जवाबों:


26

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

lambda k:pow(3,10**k*2/3+1,10**k)

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

powसमारोह कुशलतापूर्वक मॉड्यूलर प्रतिपादक की गणना करता है3**(10**k*2/3+1)%10**k

हमें इसका हल खोजने के लिए कहा गया है r**3 = 3 (mod 10**k)। हम एक ऐसे प्रतिपादक को ढूंढना चाहते हैं eजिसके लिए मानचित्रण कार्यशील मोड पर x -> x**eउलटा हो , जिस प्रकार आरएसए में डिक्रिप्शन और एन्क्रिप्शन के प्रतिपादक मूल मूल्य का उत्पादन करने के लिए रद्द कर देते हैं। इसका मतलब है कि सभी के लिए । (हम यह मान लेंगे ।) फिर, हम ठीक हो सकते हैंx -> x**310**k(x**3)**e = x (mod 10**k)xgcd(x,10) = 1r प्राप्त करने के लिए क्यूबिंग को हटाकर हैं r = 3**e (mod 10**k)

विस्तार करते हुए (r**3)**e = r (mod 10**k), हम प्राप्त करते हैं

r**(3*e-1) = 1 (mod 10**k)

हम एक प्रतिपादक की तलाश कर रहे हैं 3*e-1जो गारंटी देता है कि कई प्रतियाँ हमें देता है1

गुणा मोडुल 10**kइनवर्टेड नंबरों के लिए एक समूह बनाता है, जो कि इसके साथ है gcd(x,10) = 1। लैग्रेंज के प्रमेय द्वारा, समूह में तत्वों की गिनती x**c = 1कहां cहै। समूह सापेक्ष के लिए N, कि गिनती यूलर totient मूल्य है φ(N), से मानों की संख्या 1के लिए Nहै कि अपेक्षाकृत करने के लिए प्रधानमंत्री हैं N। तो, हमारे पास है r**φ(10**k) = 1 (mod 10**k)। इसलिए, इसके 3*e-1कई के लिए पर्याप्त है φ(10**k)

हम गणना करते हैं

φ(10**k) = φ(5**k) φ(2**k)= 4 * 5**(k-1) * 2**(k-1) = 4 * 10**(k-1)`

इसलिए, हम 3*e-1एक से अधिक होना चाहते हैं4 * 10**(k-1)

3*e - 1 = r * 4 * 10**(k-1)
e = (4r * 10**(k-1) + 1)/3

कई विकल्प संभव हैं r, लेकिन r=5संक्षिप्त अभिव्यक्ति देता है

e = (2 * 10**k + 1)/3

साथ eएक पूर्ण संख्या। एक छोटी सी गोल्फ मंजिल-डिवीजन shortens का उपयोग कर eके लिए 10**k*2/3+1, और व्यक्त r = 3**e (mod 10**k)वांछित परिणाम देता है r


1
मैं इस बारे में अधिक विस्तृत विवरण देखना चाहता हूं कि यह कैसे काम करता है, बहुत अच्छा जवाब!
कृतिका लिथोस

होना (r**3)**e = x (mod 10**k)चाहिए (r**3)**e = r (mod 10**k)? यह भी सिर्फ एक संयोग है कि (2 * 10**k + 1)/3 = 1/3 (mod 10**k)?
H.PWiz

@ H.PWiz हाँ, धन्यवाद, मैंने इसे ठीक किया। मुझे यकीन नहीं है कि यह 3 के लिए एक व्युत्क्रम है एक संयोग है। यह निश्चित रूप से पर्याप्त नहीं है, क्योंकि 2 अन्य मूल्यों के साथ काम नहीं करता है।
xnor

@xnor मुझे लगता है कि यह पर्याप्त है। आपको 2किसी भी संख्या को बदलने में सक्षम होना चाहिएx = 2 (mod 3)
H.PWiz

हमेशा की तरह, मैथ्स जीत!
ओलिवियर ग्रेजायर

18

पायथन 2 (PyPy) , 55 50 बाइट्स

-5 बाइट्स @HP Wiz को धन्यवाद !

n=p=1;exec"p*=10;n+=3*(3-n**3)%p;"*input();print n

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

(गैर-ब्रूटफोरिंग) अंकों की गणना डिजिट द्वारा की जाती है, इसलिए यह ब्रूट फोर्स से तेज है।

संस्करण निष्पादन के बिना

व्याख्या

( यह पता लगाने के लिए @Leaky नन और @ user202729 का धन्यवाद )

सबसे पहले, निरीक्षण करें कि n**3एक आवेग modulo 10 है (यानी यदि फ़ंक्शन को बुलाया जाता है f, तोf(f(n)) == n )। एक संपूर्ण खोज का उपयोग करके इसकी पुष्टि की जा सकती है।

हम अगले अंक को खोजने के लिए गणितीय प्रेरण का उपयोग कर सकते हैं।
आज्ञा देना होdnn संख्या के वें अंकों (दाएं से)।

 3 3 (mod 10)
 घ 1 ≡ 3 3 (mod 10)
    10 27 (मॉड 10)
    10 10 (मॉड १०)

अब, मान लें कि हम संख्या को जानते हैं k वें अंक ,x

              x  ≡ 3 (mod 10 k) )
  (d k + 1 · 10 k + x) 3 mod 3 (mod 10 k + 1 )
3 · d k + 1 x 2 · 10 k + x 3 mod 3 (mod 10 k + 1 ) (द्विपद विस्तार।)
(ध्यान दें कि अन्य दो शब्दों को अनदेखा किया जा सकता है क्योंकि वे 0 mod 10 हैं k + 1 हैं )
3 · d k + 1 x 2 · 10 k + x 3 mod 3 (mod 10) k + 1 )

हम जानते हैं कि:

       x ≡ 7 (मॉड 10)
      x 2 ≡ 49 (मॉड 10)
         ≡ 9 (मॉड 10)
  x 2 · 10 k · 9 · 10 k   (mod 10 k + 1) )
3 · x 2 · 10 k 2 27 · 10 k (mod 10 k + 1) )
         ≡ 7 · 10 k   (मॉड 10 k + 1 )

इसमें प्रतिस्थापित:

3 · d k + 1 x 2 · 10 k + x 3 mod 3 (mod 10 k + 1 )
  7 · d k + 1 · 10 k + x 3 mod 3 (mod 10 k + 1 )
             d k + 1 k (3 - x 3 ) ≡ ( 7 · 10 k ) (मॉड 10)
                 X (3 - x 3 ) x (7 · 10 k ) (मॉड 10)
           ∴ d k + 1 · 3 · (3 - x 3 )    mod 10 k (mod 10) (3 7 mod 10 का व्युत्क्रम है)

वास्तव में यह समाधान इष्टतम होने की संभावना है। (अधिकांश भाषाओं के लिए जहां सूत्र क्रूरता से कम क्रिया है) स्पष्टीकरण कहीं चैट में पाया जा सकता है , हालांकि काफी बिखरा हुआ है।
user202729


यह केवल और के 11लिए अंतिम अंक प्रिंट करता है । n=12n=13
इमीना

4
× और x वास्तव में कुछ फोंट में काफी समान हैं, और मैथ्स को पढ़ने के लिए बहुत कठिन बनाते हैं। क्या मैं × के बजाय · (केंद्र बिंदु) का उपयोग करने का सुझाव दे सकता हूं? (और, जाहिर है, मैथजैक्स होना अच्छा होगा )।
पीटर टेलर



4

05AB1E , 17 13 बाइट्स

7IGD3mN°÷7*θì

पोर्ट ऑफ @ ASCII- केवल पायथन 2 (PyPy) उत्तर
-4 बाइट्स और बग @ के साथ आउटपुट के लिए बग के लिए तय @ के साथ धन्यवाद , @ जगह के T%N°*+साथ θì

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

स्पष्टीकरण:

7               # Start result-string `r` at '7'
IG              # Loop `N` in the range [1, input)
  D3m           #  `r` to the power 3
       ÷        #  Integer-divided with
     N°         #  10 to the power `N`
        7*      #  Multiplied by 7
          θì    #  Then take the last digit of this, and prepend it to the result `r`
                # Implicitly output result `r` after the loop

HPWiz मेरे दृष्टिकोण golfed गया है, और चुनौती नहीं रह गया है अग्रणी शून्य की आवश्यकता है ताकि आप कर सकते हैं गोल्फ के लिए इसे और अधिक सक्षम हो?
केवल

@ ASCII- केवल शायद, लेकिन निश्चित नहीं कि कैसे। @Emigna पहले से ही golfed है T%N°*+करने के लिए θìमेरे लिए, और आगे शून्य 'फिक्स' इस दृष्टिकोण के साथ सिर्फ एक अच्छी सुविधा थी।
केविन क्रूज़सेन

4

जावा 8, 158 156 141 136 135 बाइट्स

n->{var t=n.valueOf(3);var r=n.ONE;for(int i=0;i++<n.intValue();)r=r.add(t.subtract(r.pow(3)).multiply(t).mod(n.TEN.pow(i)));return r;}

पोर्ट ऑफ @ ASCII- केवल पायथन 2 (PyPy) उत्तर
-2 बाइट्स @Neil की बदौलत
-20 बाइट्स @ ASCII- केवल के लिए धन्यवाद ।

नोट: @ OlivierGrégoire द्वारा उपयोग किए जा रहे एल्गोरिथमिक दृष्टिकोण का उपयोग करके पहले से ही बहुत छोटा जावा उत्तर हैmodPow

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

स्पष्टीकरण:

n->{                            // Method with BigInteger as both parameter and return-type
  var t=n.valueOf(3);           //  Temp BigInteger with value 3
  var r=n.ONE;                  //  Result-BigInteger, starting at 1
  for(int i=0;i++<n.intValue();)//  Loop `i` in the range [1, n]
    r=r.add(                    //   Add to the result-BigDecimal:
       t.subtract(r.pow(3))     //    `t` subtracted with `r` to the power 3
       .multiply(t)             //    Multiplied by 3
       .mod(n.TEN.pow(i)));     //    Modulo by 10 to the power `i`
  return r;}                    //  Return the result-BigInteger

ओह, आपने उस एल्गोरिथ्म का भी उपयोग किया है? मैं अपने जवाब को रोलबैक करूँगा और आपको जोड़ दूंगा;)
ओलिवियर ग्रेजायर

java.math.BigInteger u=null,r=u.valueOf(7),t=r;?
नील

@ निएल जरूर .. धन्यवाद। java.math.BigInteger t=null,r=u.valueOf(7);t=r;इससे पहले कि मैं uकुछ बाइट्स बचाने के लिए जोड़ा इससे पहले कि मैं था ।
केविन क्रूज़सेन


1
* modpow, not modpod: P
ASCII-only

4

जावा (JDK 10) , 106 बाइट्स

n->n.valueOf(3).modPow(n.valueOf(2).multiply(n=n.TEN.pow(n.intValue())).divide(n.valueOf(3)).add(n.ONE),n)

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

क्रेडिट


1
166 बाइट्स करने के लिए लूप को बदल कर for(int l=0,d;++l<=n;और बदलते BigInteger I=null;करने के लिए var I=new BigInteger("3");जो हम फिर से उपयोग कर सकते हैं।
केविन क्रूज़सेन

1
लूप को बदलकर बचाने के लिए 1 और बाइट for(int l=0,d;l++<n;)
केविन क्रूज़सेन



2

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

1 बाइट ASCII- के लिए धन्यवाद बचा लिया!

(10!1!!)
n!x=x:(n*10)!mod(9-3*x^3+x)n

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

मैं ASCII- के लिए एक समान दृष्टिकोण का उपयोग करता हूं, लेकिन मैं विभाजन का उपयोग करने से बचता हूं



1

पायथ , 23 बाइट्स

बेशक, यह ASCII-only के दृष्टिकोण का उपयोग करता है।

K7em=+K*%*7/^K3J^TdTJtU

यहाँ यह कोशिश करो!


1
@DigitalTrauma ओह> _ <मैं कसम खाता हूं कि मैंने आपके उत्तर पर ध्यान नहीं दिया है ... मेरे पास पहले ASCII के समाधान का एक पोर्ट था, फिर मैंने xnor का देखा और मैंने इसे सीधे गोल्फ में पोर्ट किया: PI का अनुमान है कि मैं प्रारंभिक संशोधन पर वापस आ जाएगा , हालांकि।
श्री एक्सकोडर

1

चारकोल , 26 22 बाइट्स

≔⁷ηFN≧⁺﹪׳⁻³Xη³Xχ⊕ιηIη

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

≔⁷η

परिणाम के लिए प्रारंभिक 7. (7 नहीं होना चाहिए, लेकिन 0 काम नहीं करता है।)

FN

आवश्यक अंकों की संख्या से अधिक लूप।

        η       Current result.
       X ³     Take the cube. 
     ⁻³         Subtract from 3.
   ׳           Multiply by 3.
            ⊕ι  Increment the loop index.
          Xχ    Get that power of 10.
  ﹪             Modulo
≧⁺            η Add to the result.

अब 4 बाइट बचाने के लिए @ HPWiz के दृष्टिकोण का उपयोग करता है।

Iη

परिणाम प्रिंट करें।

यहाँ एक 28-बाइट जानवर-बल संस्करण है जो मनमाने मूल्यों की घन जड़ों को लेता है:

FN⊞υ⊟Φχ¬﹪⁻XI⁺κ⭆⮌υμ³IηXχ⊕ι↓Iυ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। पहला इनपुट अंकों की संख्या है, दूसरा रूट के लिए मूल्य है।


HPWiz ने अपडेट किया है (पढ़ें: गोल्फ की हुई) मेरा दृष्टिकोण। इसके अलावा, लीकेज नून ने आवश्यकताओं को अद्यतन करने के बाद से स्ट्रैपमैप की आवश्यकता नहीं होनी चाहिए। पहला लिंक भी ब्रूट फोर्स वर्जन> _>
ASCII-only

@ ASCII- केवल धन्यवाद, मैंने लिंक को ठीक कर दिया है और HPWiz के दृष्टिकोण को पोर्ट किया है, लेकिन मुझे kआधार 10 नंबर के रूप में उलट सूची के साथ संक्षिप्त करने के लिए स्ट्रिंगपाइप की आवश्यकता थी ।
il

हम्म। मुझे लगता है कि यह सिर्फ सादा संख्या तरीका कर रहा है गोल्फ खिलाड़ी हो सकता है। मुझे हालांकि अनुमान नहीं है
ASCII-only

@ ASCII- केवल मेरे द्वारा उपयोग किए गए पिछले संस्करण के लिए Base(Reverse(u), 10)लेकिन उपसर्ग में k4 बाइट्स की लागत होती है, जबकि इसे एक स्ट्रिंग के रूप में करने में केवल 2 बाइट्स का खर्च होता है, जिसके परिणामस्वरूप Castखाते में लेने के बाद 1 बाइट की बचत होती है।
नील

1

जे , 33 बाइट्स

f=:3 :'((10x^y)|]+3*3-^&3)^:y 1x'

TIO

@ ASCII- केवल उत्तर का पोर्ट लेकिन निश्चित मोडुलो 10 ^ n का उपयोग करके


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