Numaram benzersiz mi


21

Gelen bu meydan biz faktör ağaçları kullanarak tamsayı her pozitif kodlamak için bir yol öğrendim.

İşte nasıl çalışıyor:

  • Boş dizgenin değeri 1.

  • (S)burada Sbir değere sahip herhangi bir ifadedir S sonucunu S asal.

  • ABburada Ave Bdeğerleriyle arbirary ifadelerdir A ve B , sırasıyla değerine sahip olduğu bir B * .

Mesela 7'yi temsil etmek isteseydik yapardık

  7 -> (4) -> (2*2) -> ((1)(1)) -> (()())

Bu yöntemi kullanarak her sayıyı temsil edebileceğimizi ortaya koyuyor. Aslında bazı sayıları birden fazla şekilde temsil edebiliriz. Çarpma değişmeli 10 olduğundan, ikisi de

((()))()

ve

()((()))

Aynı zamanda, bazı sayılar yalnızca 1 şekilde gösterilebilir. Örneğin 8 al. 8 sadece olarak temsil edilebilir

()()()

Ve tüm atomlarımız aynı olduğundan, onları yeniden düzenlemek için taşınırlık kullanamayız.


Öyleyse şimdi soru “Hangi sayılar yalnızca 1 şekilde temsil edilebilir?” Sorusudur. İlk gözlem, daha yeni orada yapmaya başladığım bir gözlem. Mükemmel güçlerin bazı özel özelliklere sahip olduğu görülüyor. Daha fazla araştırma altında 36'yı bulabiliriz ki bu 6 2 mükemmel bir güçtür ancak çoklu temsilleri vardır.

(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())

Bu mantıklı çünkü 6 zaten yeniden düzenlenebilir, yani 6'dan yaptığımız herhangi bir sayı da yeniden düzenlenebilir olmalıdır.

Şimdi bir kuralımız var:

  • Sayı, benzersiz bir gösterime sahip bir sayının mükemmel bir gücü ise, benzersiz bir gösterime sahiptir.

Bu kural, bir asal sayının benzersiz olup olmadığını belirlemek için bileşik sayının benzersiz olup olmadığını belirlememize yardımcı olabilir. Şimdi bu kurala sahip olduğumuza göre, asal sayıyı benzersiz yapan şeyin ne olduğunu bulmak istiyoruz . Bu aslında oldukça açıktır. Biz benzersiz bir numara alıp parantez içinde sarın, sonuç eğer başka bir yol gidiyor, benzersiz olması gerekir ve n birden gösterimleri vardır n birden temsiller olmalıdır inci asal. Bu ikinci kuralı verir:

  • N inci asal ancak ve ancak eşsizdir n benzersizdir.

Bu kuralların her ikisi de özyinelemelidir, bu nedenle temel bir duruma ihtiyacımız olacak. En küçük benzersiz sayı nedir? Biri 2 demeye cazip gelebilir (), çünkü sadece , ancak 1, boş dize daha küçük ve benzersizdir.

  • 1 benzersizdir.

Bu üç kural ile bir sayının benzersiz bir faktör ağacının olup olmadığını belirleyebiliriz.

Görev

Bunun geldiğini görmüş olabilirsiniz, ancak göreviniz pozitif bir tamsayı almak ve benzersiz olup olmadığını belirlemektir. Bu hesaplamayı yapan bir program veya işlev yazmalısınız. İki olası değerden birini çıktılamalısınız, bu değerlerin size kalmış olması gerekir, ancak girdi benzersiz olduğunda çıktı olarak "evet", biri çıktı çıktıysa "hayır" gösterilmelidir.

Cevaplarınız daha az byte'ın daha iyi olmasıyla byte olarak puanlanmalıdır.

Test durumları

İşte ilk çift benzersiz sayılar:

1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31

Önerilen test durumları

5381 -> Unique

Öyle görünüyor ki OEIS A214577 bir şekilde ilişkili, bu nedenle daha fazla test senaryosuna ihtiyacınız olursa deneyin, ancak bunların aynı olduğunu bilmiyorum, bu nedenle kendi sorumluluğunuzdadır.


Asal faktörlerin sıralanması gerektiğine inanıyorum ama her neyse.
Nissa

1
@JonathanAllan hayır, hepsi burada.
Nissa

Önerilen test vakası: 5381
Nissa,

@StephenLeppik Test vakası eklendi, teşekkürler.
Buğday Sihirbazı

1
@ H.PWiz Tam bir programın çıktı olarak hata verebileceğini söyleyeceğim, çünkü bu bir program için bir çıktı biçimidir, ancak bir işlev bir değer döndürmelidir.
Buğday Sihirbazı

Yanıtlar:


9

Kabuğu , 11 10 bayt

Zgarb sayesinde bir bayt kurtarıldı!

Ωεo?oṗ←¬Ep

İade 1benzersiz için, 0aksi

Çevrimiçi deneyin! Veya ilk 50’yi iade ediyor

Açıklama:

Ωε              Until the result is small (either 1 or 0), we repeat the following
         p     Get the prime factors
  o?           If ...
        E      they are all equal:
    ȯṗ←           Get the index of the first one into the primes
               Else:
       ¬          Not the list (since non-empty lists are truthy, this returns 0)

Oh, ve açıklaman " ȯp←" diyor .
Outgolfer Erik

@EriktheOutgolfer İyi yakalandı, düzeltildi
H.PWiz

Ben ṁ¬sadece ¬listenin o dalda boş olmaması gerektiğine inanıyorum.
Zgarb

@Zgarb Oh fantezi, sanırım daha önce bu ipucunu
verdiniz

7

Jöle , 10 bayt

Etrafta kemanlama bir sürü sonra!

ÆET0ṪḊ?µl¿

Olumlu bir tamsayı alıp 1benzersiz 0olup olmadığını döndüren bir monadik bağlantı .

Çevrimiçi deneyin!

Nasıl?

ÆET0ṪḊ?µl¿ - Link: number, n     e.g. 11          or 13            or 20
         ¿ - while:
        l  - ...condition: (left) logarithm with base (right)
           -               note: x log 0 and x log 1 both yield None, which is falsey
       µ   - ...do the monadic chain: (first pass shown)
ÆE         -   prime exponent array   [0,0,0,0,1]    [0,0,0,0,0,1]    [2,0,1]
  T        -   truthy indexes         [5]            [6]              [1,3]
      ?    -   if:
     Ḋ     -   ...condition: dequeue (i.e. if length > 1)
   0       -   ...then: literal zero   -              -               0
    Ṫ      -   ...else: tail           5              6               -
           - end result                1              0               0

Bekle, logaritma, ne?

Döngünün bazı örneklerini çalıştıralım.

Eğer n=31( 31 1 , onbirinci asal):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |       31 |        31 |    1.000 -> continue
         2 |       11 |        31 |    0.698 -> continue
         3 |        5 |        11 |    0.671 -> continue
         4 |        3 |         5 |    0.683 -> continue
         5 |        2 |         3 |    0.631 -> continue
         6 |        1 |         2 |    0.000 -> stop, yielding left = 1

Eğer n=625( 5 4 ):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |      625 |       625 |    1.000 -> continue
         2 |        3 |       625 |    0.171 -> continue
         3 |        2 |         3 |    0.631 -> continue
         4 |        1 |         2 |    0.000 -> stop, yielding left = 1

Eğer n=225( 5 2 × 3 2 ):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |      225 |       225 |    1.000 -> continue
         2 |     *  0 |       225 |-inf+nanj -> continue
         3 |     ** 0 |         0 |     None -> stop, yielding left = 0

*The dequeued list was not empty
**Tailing an empty list in Jelly yields 0

4

APL (Dyalog) , 42 bayt

CY'dfns'
{1≥⍵:11=≢∪r3pco⍵:∇11pcor0}

Es ⎕CY'dfns'ile kullanmak dfnstio için pek mümkün değil.


Benim cevap ben ilk versiyonunu yazdım, her ne kadar 4 civarında saat önce, sizinkine oldukça benzer çıktı
H.PWiz

@ H.PWiz dostum, insanlar daha kısa bir çözüm bulduğumda sadece yorum yapmayı tercih etsem de, insanların aynı dilde sunumunu umursamıyorum ama bu neredeyse aynı. Saklamanı umursamıyorum ama aynı işe yaramaz görünen cevaplar buluyorum. Zamanlama hakkında - bu şekilde çalışır. Bir başkası önce geldiği için onlarca cevap bıraktım. Ben (ve geri kalanına inanıyorum) eğlence için yapıyorum, gerçek bir rekabet değil.
Uriel

Bu kadar uzun sürdüğü için özür dilerim ama cevabımı sildim. Geriye bakınca, bir yorum daha uygun olurdu gibi görünüyor. Sanırım, o zamanlar
APL’de yeniyken


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.