Doğru ve tfeL truncatable primes


11

Bir sağ truncatable asal her önek (10 tabanında) bir asal asal olduğunu. Bir sol-truncatable asal tam her postfix bir asal karşısında olduğu (0 ile başlayan asal izin verilmez). Bu sekansların her ikisi de sonludur (Sadece 83 adet sağ üçü vardır, 4260 sol üçü vardır).

Tek bir sayıyı girdi olarak kabul eden ve n . Sağa doğru çıkarılabilir asal üreten bir program yazmanız gerekir . Program okunur Ancak yerleştirilmiş geriye doğru , bu üretmelidir n sol truncatable asal.

Bir programı geriye doğru düzenlemek için, programı kelimelere böldükten sonra kelimelerin sırasını tersine çeviriyoruz. Bir kelime, herhangi bir sayıda karakterden oluşabilir.

Örneğin, aşağıdakiler programınızsa:

hello world
1234567890

Aşağıdakilere mümkün olduğunca geriye dönük düzenlemeler yapılabilir:

Her karakterin bölünmesi:

0987654321
dlrow olleh

Boşlukta bölme:

1234567890
world hello

Keyfi olarak bölme (netlik için borular eklendi):

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

908723456orld
1lo whel

Programınızı geriye doğru düzenlerken, tıpkı diğer karakterler gibi tüm boşluklar da dikkate alınmalı ve ters çevrilmelidir.

İleri test girişleri:

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

Geriye doğru test girişleri:

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

Programlar makul bir sürede (bir dakikadan az) çalışabilmelidir

Bu bir , bu yüzden en az bayt ile program kazanır!


Hayır. Atomu sonra lo wolup orld\n1. Yeni satır atomu
Nathan Merrill

Ah teşekkürler. Şimdi anladım. Karışıklığı önlemek için önceki iki
yorumumu

Yanıtlar:


6

Jöle , 26 23 bayt

ileri

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

Çevrimiçi deneyin!

Kelimeler

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

Geriye

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

Çevrimiçi deneyin!

Kelimeler

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

Nasıl çalışır

Tüm Jelly programları, satır besleme veya pilc ( ) ile ayrılmış bağlantılardan (Jelly'in alma işlevleri) oluşur . Sonuncusu ana bağlantıdır ; program çalıştırıldığında otomatik olarak çağrılır.

İleri program aşağıdaki gibi çalışır.

Ñ                   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.

Geriye doğru program hemen hemen aynı şeyi yapar; sadece iki fark vardır.

  • Ana bağlantı şimdi Ñ, basitçe altındaki bağlantıyı (etrafa saran), yani ileri programın ana bağlantısını çağırır.

  • 9pp9ters Kartezyen ürünü iade etmek yerine .


4

Python 2, 143 139 bayt

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

Beş bölümden oluşur:

  1. I=1
  2. Yeni satır
  3. a={2}…[~-n]
  4. Yeni satır
  5. I=0

Yani tersine çevirme sadece değerini çeviriyor I.

açıklama

Bu fonksiyon f, küresel değerine bağlı olarak, ya soyu açılabilir primler (LTP'ler) ya da sağ açılabilir primler (RTP'ler) için tekrarlayan bir arama gerçekleştirir I. Bu değerler sete eklenir a. Ardından, -th lambda n:sorted(a)[~-n]döndürür n.

Bir yaprağı ya LTP, RTP, sıfır olmayan rakam + LTP ya da RTP + sıfır olmayan rakam olarak tanımlayalım . Tüm bunlar, föncelikliliği kontrol etmek isteyebilecek değerlerdir .

Tüm yapraklar için çalışan bir Fermat yalancı test tasarladım:

      

(63973 bir Carmichael numarasıdır .)

Bu test true zdeğerini döndürürse , kümeye eklenmeli ave devam etmeliyiz str(z). Sorumlu kod kısmı:

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

İlk olarak, dava ile ilgilenmek istiyoruz z == 2. Bunu sadece burada kalarak ve 2başlangıçta tanımladığımızda kodlama yaparak yapıyoruz a! (DÜZENLEME: Ve eğer yakalarsak zararlı hiçbir şey olmaz z == 1.) Şimdi bunu varsayabiliriz z ≥ 3.

Bazı “ve” leri kısa devre zincirleme karşılaştırmaya çevirdim: ilk üç karşılaştırmanın daha önce başarılı olması gerekiyor a.add(z)ve f(u)hiç değerlendirilmiyor. İşte tüm rolleri:

  1. z%91>0ilk koşulumuzu kodlar. (63973, bir yaprağın kendisi olmayan 91 ile bölünebilir, bu yüzden onu tanırız.)
  2. 0<2her zaman doğrudur, ancak zincirleme daha kısadır and.
  3. 2==pow(2,z,z) ikinci koşulumuzu kodlar.
  4. pow(2,z,z)>a.add(z)eklemeyi tetikler ve set.adddöndürmeler her zaman doğrudur Noneve tamsayılar her zaman büyüktür None.
  5. a.add(z)<f(u)özyinelemeyi tetikler. Gerçek değeri önemsizdir.

Teşekkür

  • Dennis dört bayt kurtardı ( u=[d+s,s+d][I]u=d[I:]+s+d*I; z==2z<3ve mod 91 numarası). Teşekkürler!
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.