Form a list using prime numbers

You have been given N piles of coins. You have decided to divide each of those B1, B2, ..., BN piles among separate groups of people. The amount of people receiving coins has to be a prime number and the amount of money given to each person must be different in each pile.

Input: N, B1, B2, ..., BN (The amount of coins in each individual pile).

Output: NP1, NP2, ..., NPN with NP being the number of people(prime number) receiving the coins. If this is impossible then yield some unachievable result (like 0, -1, None, [], or "impossible") or raise an error.

Example:

3
7 8 9


Output: 7 2 3

Because 7 is the only prime number that can divide 7 evenly, the same for 8 and 2 and 9 and 3. Also, notice that (7 / 7 = 1) ≠ (8 / 2 = 4) ≠ (9 / 3 = 3).

• N is a redundant input, may we forego taking it? – Jonathan Allan Dec 23 '17 at 23:37
• May we yield some other non-achievable result (e.g. 0, an empty list, a string like "impossible", or raise an error) for impossible cases? (I'd actually recommend only valid input, or allowing undefined behaviour in such cases, but it's up to you.) – Jonathan Allan Dec 23 '17 at 23:40
• You may forego the input of N. And yes to the second question. – McLinux Dec 23 '17 at 23:41
• So, the lowest prime divisor of each number? – totallyhuman Dec 23 '17 at 23:53
• @totallyhuman not quite - if the input were say [7,8,8] it would be impossible (since using 2 for both 8 results in two 4s.) Furthermore, if the input were say [7,30,30] then [7,2,2] would be invalid but [7,2,3] and [7,3,2] amongst others would work. – Jonathan Allan Dec 24 '17 at 0:01

05AB1E, 13 bytes

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


Try it online!

A port of my Pyth answer.

• Ò gets the prime factÒrs of each.
• .» folds a dyadic command, â (cârtesiân product) between each two elements in the list from right to left with opposite right/left operands.
• €˜ flattens ach.
• ʒ...} filtʒrs those which satisfy the following condition:
• ÷ pairwise integer division with the input.
• D Duplicate (pushes two copies of the item to the stack).
• Ù removes duplicate elements, keeping a ÙniqÙe occurrence of each element.
• Q checks for eQuality.
• θ gets the last element.

Jelly,  15  14 bytes

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


A full-program which accepts one argument, a list of numbers, and prints a representation of another list of numbers, or 0 if the task is impossible.

Try it online!

How?

³:Œ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 Haha, I think µ⁼Q would work as an alternative to the fancy distinct sieve, but good job! – Mr. Xcoder Dec 24 '17 at 6:59

Pyth, 15 bytes

ef{I/VQT.nM*FPM


Try it here!

How?

ef{I/VQT.nM*FPM | Full program, which foregoes the size.
|
PM | Prime factorisation of each integer.
*F   | Fold Cartesian Product over the list of primes.
.nM     | Flatten each.
f              | Filter.
{I/VQT        | Filter condition (uses a variable T).
/V          | Vectorised integer division...
QT        | Over the input and the current item.
{I            | Is invariant over deduplication (removing duplicates)?
e               | Take the last element.
| Output the result implicitly.