K chữ số cuối của Quyền hạn 2


16

Đối với bất kỳ số nguyên r , tồn tại lũy thừa 2 mỗi số có chữ số r cuối cùng là 1 hoặc 2.

rx2xmod10r

Với , , vì Với , , vì Lưu ý: với , là (một lần nữa)r=2x=929=512
r=3x=89289=618970019642690137449562112
r=4x=89

Đầu vào:r100

Đầu ra:x

Ví dụ.

Đầu vào: 2
Ouput: 9

Đầu vào: 3
Ouput: 89

Chương trình nên chạy trong một khoảng thời gian hợp lý.

EDIT: Trình tự oeis cho thử thách này là A147884 .


2
Các OEIS cho nhiệm vụ này là A147884
anh hùng rơm

@Debanjan, đúng vậy. @ S.Mark, quyền hạn của 2, không phải 3.
st0le

Tôi có một bài báo, mô tả một thuật toán hiệu quả. Tôi sẽ đăng nó nếu ai đó không thể tiến lên phía trước với nó.
st0le

à, được rồi, cảm ơn
BẠN

@ st0le: Độ phức tạp?
whacko__Cracko

Câu trả lời:


4

Python, 166 ký tự

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

Làm tốt lắm, Mark :) Tôi đoán bạn đã tìm thấy nó :)
st0le

Bạn có thể lưu một vài byte bằng dấu chấm phẩy: 161 byte
Movatica

2

Ngôn ngữ Wolfram (Mathicala) , 78 76 57 55 byte

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

Hãy thử trực tuyến!

IntegerDigits[a,10,r]tạo một danh sách các rchữ số thập phân cuối cùng của a. Trừ 3/2 và kiểm tra xem tất cả chúng có phải là -1/2 hoặc +1/2 không.

Kiểm tra thời gian: 20 giây trên TIO cho r = 1 .. 10.

Ngôn ngữ Wolfram (Mathicala) , 102 95 91 89 byte

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

Hãy thử trực tuyến!

Giải pháp này dài hơn nhiều nhưng nhanh hơn nhiều. Bằng cách sử dụng đường dẫn được đề xuất trong OEIS A147884 để đi qua OEIS A053312 , cũng như sử dụng FindInstancephép thuật, TIO quản lý để tính toán r = 1 .. 12trong vòng chưa đầy một phút.


1

Ruby - 118 ký tự

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

Haskell, 115 ký tự

import List
main=readLn>>=print. \r->head$findIndices(all(`elem`"12").take r.(++cycle"0").reverse.show)$iterate(*2)1


1

05AB1E , 18 15 byte

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

Dùng thử trực tuyến hoặc xác minh 8 trường hợp thử nghiệm đầu tiên (bất kỳ lần nào nữa).

Giải trình:

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

CSharp - 111 ký tự

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

Julia 133 122 (51) byte

Lấy cảm hứng từ câu trả lời của BẠN:

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)

Hãy thử trực tuyến!

Phần sau đây ngắn hơn nhiều, nhưng nó gặp sự cố với r> 8, giống như một số câu trả lời khác:

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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.