ตัวเลขหลักสุดท้ายของพลังของ 2


16

สำหรับจำนวนเต็มใด ๆrจะมีกำลัง 2 ซึ่งแต่ละหลักrคือ 1 หรือ 2

rx2xmod10r

สำหรับ , , ตั้งแต่ สำหรับ , x = 89 , ตั้งแต่2 ^ {89} = 618970019642690137449562 \ color {blue} { \ textrm {112}} หมายเหตุ: สำหรับr = 4 , xคือ= 89 (อีกครั้ง)r=2x=929=512
r=3x=89289=618970019642690137449562112
r=4x=89

อินพุต: r100

ผลลัพธ์: x

เช่น.

อินพุต: 2
Ouput: 9

อินพุต: 3
Ouput: 89

โปรแกรมควรทำงานในเวลาที่เหมาะสม

แก้ไข: OEIS ลำดับสำหรับความท้าทายนี้เป็นA147884


2
OEIS สำหรับงานนี้คือA147884
Quixotic

@Debanjan ใช่จริง @ S.Mark พลังของ 2 ไม่ใช่ 3
st0le

ฉันมีกระดาษซึ่งอธิบายขั้นตอนวิธีที่มีประสิทธิภาพ ฉันจะโพสต์ไว้ถ้ามีคนไม่สามารถก้าวไปข้างหน้ากับมันได้
st0le

อาตกลงขอบคุณ!
คุณ

@ st0le: ความซับซ้อน?
whacko__Cracko

คำตอบ:


4

Python, 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 bytes
movatica

2

ภาษา Wolfram (Mathematica) , 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 วินาทีใน TIO r = 1 .. 10สำหรับ

ภาษา Wolfram (Mathematica) , 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 A147884เพื่อผ่านOEIS A053312เช่นเดียวกับการใช้FindInstanceเวทย์มนตร์ TIO จัดการเพื่อคำนวณr = 1 .. 12ในเวลาน้อยกว่าหนึ่งนาที


1

Ruby - 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 กรณีแรก (หมดเวลาอีก)

คำอธิบาย:

2x>RR2x

∞.Δ            # 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

Julia 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

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.