2 के शक्तियों का अंतिम k अंक


16

किसी भी पूर्णांक आर , 2 की एक शक्ति मौजूद है, जिनके अंतिम आर अंक 1 या 2 हैं।

आरएक्स2एक्सआधुनिक10आर

के लिए , , के बाद से के लिए , , के बाद से नोट: के लिए , है (फिर)आर=2एक्स=929=512
आर=3एक्स=89289=618970019642690137449562112
आर=4एक्स=89

इनपुट:आर≤100

आउटपुट:एक्स

उदाहरण के लिए।

इनपुट: २
ऊपुत: ९

इनपुट: 3
ऊपुत: 89

कार्यक्रम उचित समय पर चलना चाहिए।

EDIT: इस चुनौती के लिए oeis अनुक्रम A147884 है ।


2
इस कार्य के लिए OEIS A147884
— Quixotic

@ डिबंजन, हाँ सच। @ S.Mark, 2 की शक्तियां, 3. नहीं
— st0le

मेरे पास एक पेपर है, जो एक कुशल एल्गोरिदम का वर्णन करता है। अगर कोई इसके साथ आगे नहीं बढ़ सकता है तो मैं इसे पोस्ट करूँगा।
— st0le

आह, ठीक है, धन्यवाद!
— यू

@ st0le: जटिलता?
— whacko__Cracko

जवाबों:


4

पायथन, 166 वर्ण

k,f,g=1,4,16
i=j=2
n=input()
m=10**n
a=lambda c:c('')-1-i or c('1')+c('2')-c('')+1
while i<=n:
 while a(str(j)[-i:].count):j,k=j*g%m,k+f
 i,g,f=i+1,g**5%m,f*5
print k

महान काम, मार्क :) मुझे लगता है कि आपने इसे पाया :)
— st0le

आप अर्धविराम का उपयोग करके कुछ बाइट्स बचा सकते हैं: 161 बाइट्स
— movatica

2

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 78 76 57 55 बाइट्स

(x=0;While[Max@Abs[2IntegerDigits[2^++x,10,#]-3]>1];x)&

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

IntegerDigits[a,10,r]के rअंतिम दशमलव अंकों की एक सूची बनाता है a। 3/2 घटाएं और जांचें कि वे सभी -1/2 या +1/2 हैं।

समय जाँच: 20 सेकंड के लिए टीआईओ पर r = 1 .. 10।

वोल्फ्राम भाषा (गणितज्ञ) , 102 95 91 89 बाइट्स

k/.FindInstance[Mod[n=0;Nest[#+10^n(2-Mod[#/2^n++,2])&,0,#]-2^k,5^#]==0,k,Integers][[1]]&

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

यह समाधान बहुत लंबा है लेकिन बहुत तेज है। OEIS A053312 के माध्यम से जाने के लिए OEIS A147884 में सुझाए गए मार्ग को अपनाते हुए , साथ ही साथ FindInstanceजादू का उपयोग करके , TIO r = 1 .. 12एक मिनट से भी कम समय में गणना करता है ।


1

रूबी - 118 वर्ण

k,f,g,m=1,4,16
i=j=2
m=10**(n=gets.to_i)
((k+=f;j=j*g%m)until j.to_s=~%r{[12]{#{i}}$};i+=1;f*=5;g=g**5%m)until n<i
p k



1

05AB1E , 18 15 बाइट्स

∞.Δo©‹®I.£2X:`P

इसे ऑनलाइन आज़माएं या पहले 8 परीक्षण मामलों (किसी भी अधिक समय) को सत्यापित करें ।

स्पष्टीकरण:

2एक्स>आरआर2एक्स

∞.Δ            # Find the first positive integer x which is truthy (==1) for:
   o           #  Take 2 to the power the integer: 2^x
    ©          #  Store it in variable `®` (without popping)
     ‹         #  Check that it's larger than the (implicit) input: r < 2^x
               #  (1 if truhy; 0 if falsey)
    ®          #  Push variable `®` again: 2^x
     I.£       #  Only leave the last input amount of digits
        2X:    #  Replace all 2s with 1s
           `   #  Push all digits separated to the stack
    P          #  Take the product of all digits on the stack (including the earlier check)
               #  (NOTE: Only 1 is truthy in 05AB1E)

0

CSharp - 111 वर्ण

int a(int r){int x=1;a:x++;foreach(var c in Math.Pow(2,x)%Math.Pow(10,r)+"")if(c!='1'&&c!='2')goto a;return x;}


0

जूलिया 133 122 (51) बाइट्स

आपके उत्तर से प्रेरित:

n->(k=1;f=4;g=big(16);i=j=2;m=10^n;while i<=n;while digits!(fill(0,i),j)⊈1:2;j,k=j*g%m,k+f;end;i,g,f=i+1,g^5%m,f*5end;k)

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

निम्नलिखित बहुत छोटा है, लेकिन यह r> 8 के लिए क्रैश हो जाता है, जैसे कुछ अन्य उत्तर:

f(r,x=big(1))=digits!(fill(0,r),x)⊈1:2&&f(r,2x)+1

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

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