Çılgın Kütüphanecinin Aritmetik Asal Dizisi


18

Kütüphaneci, sıralama algoritmanızı kullanarak işinizi aldattığınızı yakaladı , bu yüzden şimdi cezalandırılıyorsunuz. Kütüphanecinin karşılıksız sevgilerinin nesnesini etkileyebilmesi için bazı kodlar yaratmanız istendi, matematik öğretmeni. Yani en emin vasıtası "atanmış gibi diğer görevleri" Ne ...

Herkes taban 10'daki N olarak adlandırılan doğal sayı dizisine aşinadır :

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

O, biz en çok diyelim, asal sayı dizisini oluşturabilir P her eleman, öyle ki, P içinde tam iki bölenler vardır N , yani 1ve kendisi. Bu dizi:

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

Tamam, şu ana kadar oldukça rutin.

Bir şık fonksiyonunun kütüphane düşünce F (x, y), bir sayı alır xgelen N koşulu ile, 0 <= x <= 9ve bir sayı yile ilgili N , ve ek xolarak y, yani, her pozisyonda bireyin ondalık genişleme (, prepending sokulması, ya da ekleme xolarak y), sıralanan yeni sayılar kümesini döndürür.
Örneğin, F (6, 127) neden olur

1267, 1276, 1627, 6127

Yine de bu biraz sıkıcı. Kütüphaneci , artan şekilde sıralanan yeni bir işlev belirterek işleri biraz daha renklendirmek ister z -> {p : p in P and F(z,p) subset of P}.
Örneğin, z (7) olacak

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

çünkü 37ve 73her ikisi de asal 719 179ve 197hepsi asal vb.

Not z (2) bir etmiştir hiçbir asal çünkü boş 2eklenen hiç hâlâ asal olacaktır. Benzer şekilde {0,4,5,6,8} için.

Göreviniz, belirli bir x için z (x) dizisindeki ilk 100 sayıyı üretecek ve çıkaracak kod yazmaktır .

Giriş

Tek bir tamsayı x öyle ki 0 <= x <= 9. Giriş, işlev bağımsız değişkeni, STDIN veya eşdeğeri aracılığıyla olabilir.

Çıktı

Seçtiğiniz şekilde sınırlandırılmış ilk 100 sayının bir dizisi, dizi yukarıda açıklandığı gibi z (x) değerini karşılayacak şekilde STDOUT veya eşdeğeri olacaktır . Eğer z (x) boş olarak {0,2,4,5,6,8} için durum, kelime Empty Setyerine çıkış olmalıdır.

Kısıtlamalar

  • Bu kod golf, çünkü bunu bir dizin kartına kopyalamanız gerekecek, böylece kütüphaneci matematik öğretmenini gösterebilir ve eliniz kolayca sıkışır.
  • Standart boşluk deliği kısıtlamaları geçerlidir. Kütüphaneci dolandırıcılara tahammül etmez.

Referans dizileri

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

İlgili: En büyük kırılgan prime'i bulun / Bir alt dizeden en küçük prime'ı bulun / Rakamın silinmesinden sonra hala en büyük prime'ı bulun

Yanıtlar:


5

Pyth, 49 bayt

Python3 ve diğer Pyth cevapları gibi, 100 numara bulma zamanı yasaklayıcıdır. (test takımı 10 verir)

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

Çevrimiçi deneyin


1
Firar "gereksiz, çok güzel bir iş olsa.
FryAmTheEggman

Hatırlatma için teşekkürler. EOL artık bir dizeyi sonlandırmadığından, belirsiz dizelerden kaçındım, ancak elbette EOF hala çalışıyor
Brian Tuck

4

Python 3, 188 bayt

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)

Kötü golf, ama şimdilik bir şey. Kontrol etmek yerine, her biri için bir yarı mamul p in P and F(z,p) subset of Polup olmadığını kontrol ediyoruz . Öncelik testi için deneme bölümü ile birleştirin ve bir algoritma elde edin.p*ff in F(z,p)O(scary)


+1 içinO(scary)
AdmBorkBork

1
Hiçbiri i ayarında güzel hile.
lirtosiast

3

Perl, 124 bayt

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

Aşağıdaki komut satırı seçeneğini gerektirir:, -palMntheory=:all16 olarak sayılır. Stdin'den alınan girdi.

Kullanımları @DanaJ 'ın Math::Prime::Util(pragma yüklü Perl için modül ntheory). Şununla al:

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

is_prime değerinin altındaki tüm değerler için deterministiktir 2 64'ün bu bizim için yeterlidir.


Örnek Kullanımı

$ 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

Beklenen Çalışma Zamanı

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


1

Pyth, 58

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

Bu test takımı yalnızca ilk 10 sayıyı hesaplar, çünkü geri kalanını oluşturmak çok uzun sürer. Brute hem basamakları hem de rakamların girilmesini zorlar. Öyle kötü bir performans sergilediğim için 100'e kadar çalıştıramadım, bu yüzden lütfen sorun olup olmadığını söyle.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.