Utwórz listę, używając liczb pierwszych

10

Otrzymałeś N stosów monet. Zdecydowałeś się podzielić każdy z tych stosów B 1 , B 2 , ..., B N na osobne grupy ludzi. Liczba osób otrzymujących monety musi być liczbą pierwszą, a ilość pieniędzy przekazanych każdej osobie musi być różna w każdym stosie.

Wejście: N, B 1 , B 2 , ..., B N (ilość monet w każdym stosie).

Wyjście: NP 1 , NP 2 , ..., NP N, przy czym NP to liczba osób (liczba pierwsza) odbierająca monety. Jeśli jest to niemożliwe, wówczas wydajność nieosiągalną jakiś rezultat (jak 0, -1, None, [], lub "impossible") lub podnieść błąd.

Przykład:

3
7 8 9

Wynik: 7 2 3

Ponieważ 7 jest jedyną liczbą pierwszą, która może równomiernie podzielić 7, to samo dla 8 i 2 oraz 9 i 3. Zwróć też uwagę, że (7/7 = 1) ≠ (8/2 = 4) ≠ (9/3 = 3 ).

McLinux
źródło
2
Njest zbędny, czy możemy zrezygnować?
Jonathan Allan
Czy możemy uzyskać jakiś inny 0nieosiągalny wynik (np. Pustą listę, ciąg „niemożliwy” lub zgłosić błąd) dla niemożliwych przypadków? (Tak naprawdę polecam tylko prawidłowe dane wejściowe lub zezwalam na niezdefiniowane zachowanie w takich przypadkach, ale to zależy od ciebie.)
Jonathan Allan,
2
Możesz zrezygnować z wkładu N. I tak na drugie pytanie.
McLinux,
Więc najniższy główny dzielnik z każdej liczby?
całkowicie ludzki,
@totallyhuman niezupełnie - jeśli wejście było powiedzieć, [7,8,8]że byłoby niemożliwe (ponieważ używając 2zarówno dla 8wyników w dwóch 4sek.) Ponadto, jeśli wejście było powiedzieć [7,30,30]czym [7,2,2]byłby nieważny, ale [7,2,3]i [7,3,2]wśród innych będzie działać.
Jonathan Allan

Odpowiedzi:

5

05AB1E , 13 bajtów

Ò.»â€˜ʒ÷DÙQ}θ

Wypróbuj online!

Port mojej odpowiedzi na Pythona.

  • Òdostaje prime fakt Ò rs każdego z nich.
  • składa się dwójkowym polecenie, â(C  rtesi  N Produkt) pomiędzy każdymi dwoma elementami listy z prawej strony do lewej z przeciwległymi w prawo / lewo operandów.
  • €˜spłaszcza ach.
  • ʒ...}FILT ʒ rs te, które spełniają następujące warunki:
    • ÷ parowanie liczb całkowitych z wejściem.
    • D D uplicate (wypycha dwie kopie elementu na stosie).
    • Ùusuwa podwójne elementy, prowadzenie ù niq ù e występowania każdego elementu.
    • Qsprawdza e Q AKOŚĆ.
  • θ pobiera ostatni element.
Pan Xcoder
źródło
4

Galaretka ,  15  14 bajtów

³:ŒQẠ
ÆfŒpÇÐfṪ

Pełny program, który akceptuje jeden argument, listę liczb i drukuje reprezentację innej listy liczb lub 0jeśli zadanie jest niemożliwe.

Wypróbuj online!

W jaki sposób?

³:ŒQẠ - Link 1, unique after division?: list of primes, Ps   e.g. [7,2,2]  or  [7,3,3]
³     - program's first input                                e.g. [7,8,8]  or  [7,9,30]
 :    - integer division by Ps                                    [1,4,4]      [1,3,10]
  ŒQ  - distinct sieve                                            [1,1,0]      [1,1,1]
    Ạ - all truthy?                                               0            1

ÆfŒpÇÐfṪ - Main link: list of coin stack sizes, Bs   e.g. [7,8,12]
Æf       - prime factorisation (vectorises)               [[7],[2,2,2],[2,2,3]]
  Œp     - Cartesian product                              [[7,2,2],[7,2,2],[7,2,3],[7,2,2],[7,2,2],[7,2,3],[7,2,2],[7,2,2],[7,2,3]]
     Ðf  - filter keep if:
    Ç    -   call last link (1) as a monad                 1       1       0       1       1       0       1       1       0
         -                                                [[7,2,2],[7,2,2],[7,2,2],[7,2,2],[7,2,2],[7,2,2]]
       Ṫ - tail (note: tailing an empty list yields 0)    [7,2,2]
         - implicit print
Jonathan Allan
źródło
+1 Haha, myślę, że µ⁼Qmogłaby działać jako alternatywa dla fantazyjnego wyraźnego sita, ale dobra robota!
Pan Xcoder,
2

Pyth , 15 bajtów

ef{I/VQT.nM*FPM

Wypróbuj tutaj!

W jaki sposób?

ef {I / VQT.nM * FPM | Pełny program, który rezygnuje z wielkości.
                |
             PM | Pierwotne faktoryzacja każdej liczby całkowitej.
           * F | Złożyć produkt kartezjański na listę liczb pierwszych.
        .nM | Spłaszcz każdy.
 f | Filtr.
  {I / VQT | Warunek filtru (używa zmiennej T).
    / V | Wektoryzowany podział na liczby całkowite ...
      QT | Ponad wejście i bieżący element.
  {I | Czy niezmiennik jest związany z deduplikacją (usuwanie duplikatów)?
e | Weź ostatni element.
                | Wynik należy podać niejawnie.
Pan Xcoder
źródło