Сформуйте список, використовуючи прості числа


10

Вам дали N купи паль монет. Ви вирішили розділити кожну з цих груп B 1 , B 2 , ..., B N між окремими групами людей. Кількість людей, які отримують монети, має бути простим числом, а кількість грошей, що даються кожній людині, має бути різною у кожній купі.

Вхід: N, B 1 , B 2 , ..., B N (кількість монет у кожній окремій купі).

Вихід: NP 1 , NP 2 , ..., NP N з NP - кількість людей (проста кількість), які отримують монети. Якщо це неможливо , то вихід якої - то недосяжний результат (наприклад 0, -1, None, []або "impossible") або викликати помилку.

Приклад:

3
7 8 9

Вихід: 7 2 3

Оскільки 7 - єдине просте число, яке може поділити 7 рівномірно, те саме для 8 і 2 і 9 і 3. Також зауважте, що (7/7 = 1) ≠ (8/2 = 4) ≠ (9/3 = 3 ).


2
Nце зайвий внесок, чи можемо ми відмовитися від його використання?
Джонатан Аллан

Чи можемо ми отримати якийсь інший недосяжний результат (наприклад 0, порожній список, рядок типу "неможливо" чи помилка) для неможливих випадків? (Я насправді рекомендую лише дійсні дані або дозволяти не визначене поведінку в таких випадках, але це залежить від вас.)
Джонатан Аллан

2
Ви можете відмовитися від вступу Н. І так, до другого питання.
McLinux

Отже, найнижчий простий дільник кожного числа?
повністюлюдсько

@totallyhuman не зовсім - якби введення було сказано, [7,8,8]це було б неможливо (оскільки використання 2обох 8результатів за дві 4с.) Крім того, якби введення було сказано, [7,30,30]то воно [7,2,2]було б недійсним, але [7,2,3]і [7,3,2]серед інших працювало б.
Джонатан Аллан

Відповіді:


5

05AB1E , 13 байт

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

Спробуйте в Інтернеті!

Порт моєї відповіді Pyth.

  • Òотримує головний факт Ò rs кожного.
  • складе діадичну команду, â(c âскладе діадичну rtesi â n продукт) між кожними двома елементами списку справа наліво з протилежними правого / лівого операндів.
  • €˜ сплющується ах.
  • ʒ...} фільтр ʒ RS ті , які задовольняють наступній умові:
    • ÷ парне ціле ділення з входом.
    • D D складний (висуває дві копії елемента до стеку).
    • Ùвидаляє повторювані елементи, зберігаючи Ù niq Ù e кожного елемента.
    • Qперевірки на якість Q.
  • θ отримує останній елемент.

4

Желе ,  15  14 байт

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

Повна програма, яка приймає один аргумент, список номерів і друкує подання іншого списку чисел, або 0якщо завдання неможливо.

Спробуйте в Інтернеті!

Як?

³:Œ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

+1 Ха-ха, я думаю, µ⁼Qщо це буде альтернативою вигадливому сито, але хорошій роботі!
Містер Xcoder

2

Піт , 15 байт

ef{I/VQT.nM*FPM

Спробуйте тут!

Як?

ef {I / VQT.nM * FPM | Повна програма, яка передбачає розмір.
                |
             ПМ | Просте множення кожного цілого числа.
           * F | Складіть декартовий продукт над списком простих.
        .nM | Згладьте кожен.
 f | Фільтр.
  {I / VQT | Стан фільтра (використовує змінну T).
    / V | Векторизований цілий поділ ...
      QT | Над входом та поточним пунктом.
  {Я | Чи є інваріантним щодо дедуплікації (видалення дублікатів)?
е | Візьміть останній елемент.
                | Виведіть результат неявно.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.