Chuỗi số nguyên tố của Crazy Librarian


18

Chà, người thủ thư bắt bạn gian lận trong công việc bằng cách sử dụng thuật toán sắp xếp của bạn , vì vậy bây giờ bạn đang bị trừng phạt. Bạn đã được yêu cầu tạo một số mã để người thủ thư có thể gây ấn tượng với đối tượng về tình cảm không được đáp lại của họ, giáo viên toán học. Vậy đó là những gì "Các nhiệm vụ khác được giao" có nghĩa là ...

Mọi người đều quen thuộc với dãy số tự nhiên trong cơ sở 10, được gọi là N :

0, 1, 2, 3, 4, 5, 6, ...

Từ đó, chúng ta có thể tạo ra chuỗi số nguyên tố, hãy gọi nó là P , sao cho mọi phần tử trong P có chính xác hai ước số trong N , cụ thể là 1và chính nó. Trình tự này là:

2, 3, 5, 7, 11, 13, ...

OK, khá thường xuyên cho đến nay.

Người thủ thư nghĩ về một hàm tiện lợi F (x, y) lấy một số xtừ N , với điều kiện 0 <= x <= 9và một số ytừ N , và chèn xvào phần ymở rộng thập phân ở mọi vị trí (ví dụ, thêm trước, chèn hoặc nối xvào y), sau đó trả về tập hợp các số mới được sắp xếp.
Ví dụ: F (6, 127) sẽ dẫn đến

1267, 1276, 1627, 6127

Điều đó vẫn hơi nhàm chán, mặc dù. Những mong muốn cán bộ thư viện để gia vị thứ lên một chút hơn bởi thay vì chỉ định một chức năng mới z -> {p : p in P and F(z,p) subset of P}, sắp xếp tăng dần.
Ví dụ: z (7) sẽ là

3, 19, 97, 433, 487, 541, ...

bởi vì 3773đều là số nguyên tố, 719 179197đều là số nguyên tố, v.v.

Lưu ý rằng z (2) trống, bởi vì không có số nguyên tố nào có phần 2bổ sung sẽ vẫn là số nguyên tố. Tương tự cho {0,4,5,6,8}.

Nhiệm vụ của bạn là viết mã sẽ tạo và xuất 100 số đầu tiên trong chuỗi z (x) cho một x đã cho .

Đầu vào

Một số nguyên x sao cho 0 <= x <= 9. Đầu vào có thể thông qua đối số chức năng, STDIN hoặc tương đương.

Đầu ra

Một chuỗi gồm 100 số đầu tiên, được phân định bằng cách bạn chọn, thành STDOUT hoặc tương đương, sao cho dãy thỏa mãn z (x) như mô tả ở trên. Nếu z (x) trống, như trường hợp của {0,2,4,5,6,8}, các từ Empty Setsẽ được xuất ra thay thế.

Những hạn chế

  • Đây là môn đánh gôn, vì bạn sẽ cần phải sao chép nó vào thẻ chỉ mục để người thủ thư có thể chỉ cho giáo viên toán và tay bạn bị chuột rút dễ dàng.
  • Hạn chế kẽ hở tiêu chuẩn áp dụng. Người thủ thư không tha thứ cho những kẻ gian lận.

Trình tự tham khảo

x = 1: A069246
x = 3: A215419
x = 7: A215420
x = 9: A215421

Liên quan: Tìm số nguyên tố dễ vỡ lớn nhất / Tìm số nguyên tố nhỏ nhất từ ​​chuỗi con / Tìm số nguyên tố lớn nhất vẫn là số nguyên tố sau khi xóa chữ số

Câu trả lời:


5

Bình thường, 49 byte

Giống như Python3 và câu trả lời Pyth khác, thời gian chạy để tìm 100 số là điều cấm. (bộ kiểm tra cho 10)

?}z"1379".f&!tPZ!|FmtPvjzc`Z]dhl`Z*TT3"Empty Set"

Dùng thử trực tuyến


1
Các dấu vết "là không cần thiết, mặc dù công việc rất tốt đẹp.
FryAmTheEggman

Thanx cho lời nhắc nhở. Vì EOL không còn chấm dứt một chuỗi, tôi đã tránh các chuỗi bị hủy, nhưng tất nhiên, EOF vẫn hoạt động
Brian Tuck

4

Python 3, 188 byte

x=input()
k=1
i=100
if x in"024568":i=print("Empty Set")
while i:k+=1;s=str(k);i-=all(sum(p%d<1for d in range(2,p))<4for p in[k*int(s[:j]+x+s[j:])for j in range(len(s)+1)])and not print(k)

Chơi golf tệ, nhưng bây giờ là một cái gì đó. Thay vì kiểm tra p in P and F(z,p) subset of P, chúng tôi kiểm tra đó p*flà một bán kết cho mỗi f in F(z,p). Kết hợp điều đó với phân chia thử nghiệm để kiểm tra tính nguyên thủy và bạn sẽ có được một O(scary)thuật toán.


+1 choO(scary)
admBorkBork

1
Thủ thuật hay trong cài đặt i thành Không có.
lirtosiast

3

Perl, 124 byte

$p=prime_iterator;y/1379//or$i=+~print'Empty Set'}while($i<100){$_=&$p;is_prime"$`@F$'"or redo while//g;$i++

Yêu cầu tùy chọn dòng lệnh sau : -palMntheory=:all, được tính là 16. Đầu vào được lấy từ stdin.

Sử dụng mô-đun của @DanaJMath::Prime::Util cho perl (được tải với pragma ntheory). Nhận nó với:

cpan install Math::Prime::Util
cpan install Math::Prime::Util::GMP

is_primelà xác định cho tất cả các giá trị nhỏ hơn 2 64 , đủ cho mục đích của chúng tôi.


Sử dụng mẫu

$ echo 2|perl -palMntheory=:all oscary.pl
Empty Set

$ echo 7|perl -palMntheory=:all oscary.pl
3
19
97
433
487
541
691
757
853
1471
.
.
.
718705783
720574573
737773357
745157779
747215167
767717017
768743377
770294977
771778477
774577777

Thời gian chạy dự kiến

x = 1 : 1m 09.2s
x = 3 : 0m 04.2s
x = 7 : 2m 52.5s
x = 9 : 0m 11,5s


1

Bình thường, 58

L}bPb|*"Empty Set"}Qj204568T.f&yZ.Amyi++<JjZTdQ>JdThl`Z100

Bộ kiểm tra này chỉ tính 10 số đầu tiên vì phải mất quá nhiều thời gian để tạo ra phần còn lại. Brute buộc cả nguyên thủy và chèn các chữ số. Chứng tỏ hiệu suất kém đến mức tôi không thể chạy nó tới 100, vì vậy vui lòng cho tôi biết nếu có vấ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.