Urutan Aritmatika Pustakawan Gila dari Pustakawan

18

Nah, pustakawan itu menangkap Anda selingkuh dari pekerjaan Anda dengan menggunakan algoritma pengurutan Anda , jadi sekarang Anda sedang dihukum. Anda telah diperintahkan untuk membuat beberapa kode sehingga pustakawan dapat mengesankan objek kasih sayang mereka yang tak terbalas, guru matematika. Jadi itulah yang berarti "Tugas-tugas lain sebagaimana ditugaskan" ...

Setiap orang akrab dengan urutan bilangan alami di basis 10, yang disebut N :

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

Dari itu, kita dapat menghasilkan urutan bilangan prima, sebut saja P , sehingga setiap elemen dalam P memiliki tepat dua pembagi dalam N , yaitu 1dan itu sendiri. Urutan ini adalah:

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

OK, cukup rutin sejauh ini.

Pustakawan pemikiran dari fungsi nifty F (x, y) yang mengambil sejumlah xdari N , dengan kondisi 0 <= x <= 9, dan sejumlah ydari N , dan menyisipkan xke dalam yekspansi desimal 's di setiap posisi (yaitu, mengawali, memasukkan, atau menambahkan xke y), lalu mengembalikan kumpulan nomor baru yang diurutkan.
Misalnya, F (6, 127) akan menghasilkan

1267, 1276, 1627, 6127

Itu masih agak membosankan. Keinginan pustakawan untuk rempah-rempah hal-hal sedikit lebih oleh bukannya menetapkan fungsi baru z -> {p : p in P and F(z,p) subset of P}, diurutkan menaik.
Misalnya, z (7) adalah

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

karena 37dan 73keduanya prima, 719 179dan 197semuanya prima, dll.

Perhatikan bahwa z (2) kosong, karena tidak ada bilangan prima yang 2ditambahkan akan tetap menjadi bilangan prima. Demikian pula untuk {0,4,5,6,8}.

Tugas Anda adalah menulis kode yang akan menghasilkan dan menampilkan 100 angka pertama dalam urutan z (x) untuk x yang diberikan .

Memasukkan

Integer tunggal x sedemikian rupa sehingga 0 <= x <= 9. Input dapat melalui argumen fungsi, STDIN, atau yang setara.

Keluaran

Urutan dari 100 angka pertama, dibatasi oleh pilihan Anda, untuk STDOUT atau setara, sehingga urutan memenuhi z (x) seperti dijelaskan di atas. Jika z (x) kosong, seperti halnya untuk {0,2,4,5,6,8}, kata-kata tersebut Empty Setseharusnya menjadi output.

Batasan

  • Ini adalah kode-golf, karena Anda harus menyalin ini ke kartu indeks sehingga pustakawan dapat menunjukkan guru matematika, dan kram tangan Anda dengan mudah.
  • Batasan celah standar berlaku. Pustakawan tidak mentolerir curang.

Urutan referensi

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

Terkait: Temukan prime rapuh terbesar / Temukan prime terkecil dari substring / Temukan prime terbesar yang masih prima setelah penghapusan digit

AdmBorkBork
sumber

Jawaban:

5

Pyth, 49 byte

Seperti Python3 dan jawaban Pyth lainnya, runtime untuk menemukan 100 angka adalah penghalang. (test suite memberi 10)

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

Cobalah online

Brian Tuck
sumber
1
Trailing "tidak perlu, pekerjaan yang sangat bagus.
FryAmTheEggman
Terima kasih untuk pengingat. Karena EOL tidak lagi mengakhiri string, saya telah menghindari string yang tidak ditentukan, tetapi tentu saja, EOF masih berfungsi
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)

Golf buruk, tapi ada sesuatu untuk saat ini. Alih-alih memeriksa p in P and F(z,p) subset of P, kami memeriksa itu p*fadalah semiprime untuk masing-masing f in F(z,p). Gabungkan itu dengan divisi percobaan untuk pengujian primality, dan Anda mendapatkan O(scary)algoritma.

Sp3000
sumber
+1 untukO(scary)
AdmBorkBork
1
Trik yang bagus dalam mengatur i ke None.
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++

Membutuhkan opsi baris perintah berikut:, -palMntheory=:alldihitung sebagai 16. Input diambil dari stdin.

Penggunaan @DanaJ 's Math::Prime::Utilmodul untuk perl (sarat dengan pragma yang ntheory). Dapatkan dengan:

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

is_primebersifat deterministik untuk semua nilai kurang dari 2 64 , yang cukup untuk tujuan kami.


Contoh Penggunaan

$ 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

Runtime yang Diharapkan

x = 1 : 1m 09.2s
x = 3 : 0m 04.2s
x = 7 : 2m 52.5s
x = 9 : 0m 11.5s

primo
sumber
1

Pyth, 58

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

Ini test suite hanya menghitung 10 angka pertama karena dibutuhkan terlalu lama untuk menghasilkan sisanya. Brute memaksakan keutamaan dan pemasukan digit. Menunjukkan kinerja buruk sehingga saya belum dapat menjalankannya hingga 100, jadi tolong beri tahu saya jika ada masalah.

FryAmTheEggman
sumber