Các số nguyên tố phải và tfeL


11

Một số nguyên tố cắt phải là một số nguyên tố trong đó mọi tiền tố là một số nguyên tố (trong cơ sở 10). Một số nguyên tố rút gọn bên trái hoàn toàn ngược lại, trong đó mọi hậu tố là một số nguyên tố (các số nguyên tố bắt đầu bằng 0 không được phép). Cả hai chuỗi này là hữu hạn (Chỉ có 83 truncatables phải, trong khi có 4260 truncatables trái).

Bạn cần phải viết một chương trình chấp nhận một số duy nhất làm đầu vào và tạo ra số nguyên tố cắt ngắn thứ n . Tuy nhiên, khi chương trình được đọc sắp xếp ngược , nó sẽ tạo ra số nguyên tố cắt ngắn thứ n .

Để sắp xếp một chương trình ngược, chúng tôi chia chương trình thành các từ, sau đó đảo ngược thứ tự của các từ. Một từ có thể bao gồm bất kỳ số lượng ký tự.

Ví dụ: nếu sau đây là chương trình của bạn:

hello world
1234567890

Tất cả những điều sau đây sẽ được cho phép khi sắp xếp ngược lại có thể:

Tách trên mỗi nhân vật:

0987654321
dlrow olleh

Chia tách trên khoảng trắng:

1234567890
world hello

Tách tùy ý (thêm ống cho rõ ràng):

hel|lo w|orld
1|23456|7|8|90

908723456orld
1lo whel

Khi sắp xếp chương trình của bạn ngược, tất cả các khoảng trắng phải được xem xét và đảo ngược, giống như bất kỳ ký tự nào khác.

Chuyển tiếp kiểm tra đầu vào:

1:  2
2:  3
21: 379
60: 239933
83: 73939133

Đầu vào kiểm tra lạc hậu:

1:    2
2:    3
39:   647
187:  29173
4260: 357686312646216567629137

Các chương trình sẽ có thể chạy trong một khoảng thời gian hợp lý (dưới một phút)

Đây là một , vì vậy chương trình có ít byte nhất sẽ thắng!


Không. Nguyên tử sau lo world\n1. Dòng mới không kết thúc nguyên tử
Nathan Merrill

À, cảm ơn. Giờ đã hiểu. Xóa hai bình luận trước đây của tôi để tránh nhầm lẫn
Luis Mendo

Câu trả lời:


6

Thạch , 26 23 byte

Ở đằng trước

Ѷp9¶7ÆR2ĿV€$ÆPÐf$ÐĿFị@

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

Từ ngữ

Ñ p 9 7ÆR2ĿV€$ÆPÐf$ÐĿFị@

Phía sau

7ÆR2ĿV€$ÆPÐf$ÐĿFị@¶9p¶Ñ

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

Từ ngữ

7ÆR2ĿV€$ÆPÐf$ÐĿFị@ 9 p Ñ

Làm thế nào nó hoạt động

Tất cả các chương trình Jelly bao gồm các liên kết (Jelly's đảm nhận các chức năng), được phân tách bằng các đường dẫn hoặc đường dẫn ( ). Cuối cùng trong số họ là liên kết chính ; nó được gọi tự động khi chương trình được chạy.

Chương trình chuyển tiếp hoạt động như sau.

Ñ                   Helper link. Unused.


p9                  Helper link. Take the Cartesian product with [1, ..., 9].


7ÆR2ĿV€$ÆPÐf$ÐĿFị@  Main link. Argument: n

7ÆR                 Yield all primes up to 7.
             ÐĿ     
            $ÐĿ     Combine the two quicklinks to the left into a monadic chain,
                    and call it repeatedly until the results are no longer unique.
                    Return the array of all intermediate results.
       $              Combine the two links to the left into a monadic chain.
   2Ŀ               Call the helper link on line 2.
     Ṿ€                 Eval each array in the product. This casts to string
                        before evaluating, thus concatenating both numbers.
        ÆPÐf        Filter by primality; keep only primes.
               F    Flatten the resulting array.
                ị@  Retrieve the element at index n.

Chương trình lạc hậu thực hiện gần như chính xác; chỉ có hai sự khác biệt

  • Liên kết chính là bây giờ Ñ , chỉ đơn giản gọi liên kết bên dưới nó (bao quanh), tức là liên kết chính của chương trình chuyển tiếp.

  • 9pthay vì p9trả lại sản phẩm Cartesian đảo ngược.


4

Con trăn 2 143 139 byte

I=1
a={2}
def f(s):
 for d in'123456789':u=d[I:]+s+d*I;z=int(u);z+=z<3;z%91>0<2==pow(2,z,z)>a.add(z)<f(u)
f('')
lambda n:sorted(a)[~-n]
I=0

Bao gồm năm phần:

  1. I=1
  2. Một dòng mới
  3. a={2}…[~-n]
  4. Một dòng mới
  5. I=0

Vì vậy, đảo ngược chỉ là lật giá trị của I.

Giải trình

Hàm này fthực hiện tìm kiếm đệ quy cho các số nguyên tố cắt ngắn (LTPs) hoặc các số nguyên tố cắt phải (RTPs), tùy thuộc vào giá trị của toàn cục I. Những giá trị này được thêm vào tập hợp a. Sau đó, lambda n:sorted(a)[~-n]trả về cái nthứ-một.

Chúng ta hãy định nghĩa một chiếc lá là LTP, RTP, một số chữ số khác không + LTP hoặc RTP + một số chữ số khác không. Đây là tất cả các giá trị fcó thể muốn kiểm tra tính nguyên thủy.

Tôi đã thiết kế một thử nghiệm giả Fermat hoạt động cho tất cả các lá:

      

(63973 là một số Carmichael .)

Nếu kiểm tra này trả về đúng, thì znên thêm vào tập hợp avà chúng ta nên lặp lại str(z). Mã chịu trách nhiệm là:

z+=z<3;z%91>0<2==pow(2,z,z)>a.add(z)<f(u)

Đầu tiên, chúng tôi muốn giải quyết vụ việc z == 2. Chúng tôi làm như vậy bằng cách đơn giản là né nó ở đây và mã hóa cứng 2khi chúng tôi xác định ban đầu a! (EDIT: Và không có gì có hại xảy ra nếu chúng ta cũng bắt được z == 1.) Vì vậy, chúng ta có thể giả định rằng z ≥ 3bây giờ.

Tôi đã dịch một số câu và một số so sánh thành một chuỗi so sánh ngắn gọn: ba so sánh đầu tiên phải thành công trước đó a.add(z)f(u)được đánh giá. Đây là tất cả vai trò của họ:

  1. z%91>0mã hóa điều kiện đầu tiên của chúng tôi. (63973 chia hết cho 91, không phải là một chiếc lá, vì vậy đó là cách chúng tôi nhận ra nó.)
  2. 0<2luôn luôn đúng, nhưng chuỗi ngắn hơn and.
  3. 2==pow(2,z,z) mã hóa điều kiện thứ hai của chúng tôi.
  4. pow(2,z,z)>a.add(z)kích hoạt phép cộng, và luôn luôn đúng, vì set.addlợi nhuận Nonevà số nguyên luôn lớn hơn None.
  5. a.add(z)<f(u)kích hoạt đệ quy. Giá trị thật của nó là không quan trọng.

Sự nhìn nhận

  • Dennis đã lưu bốn byte ( u=[d+s,s+d][I]u=d[I:]+s+d*I; z==2z<3và thủ thuật mod 91 ). Cảm ơ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.