使用质数形成列表


10

您已获得N堆硬币。您已决定将B 1,B 2,...,B N堆中的每堆划分为不同的人群。接收硬币的人数必须是质数,并且每一堆中分配给每个人的金额必须不同。

输入:N,B 1,B 2,...,B N(每堆硬币的数量)。

输出:NP 1,NP 2,...,NP N,其中NP是接收硬币的人数(素数)。如果这是不可能的,然后产生一些无法实现的结果(如0-1None[],或"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对于不可能的情况,我们是否可以得出其他一些无法实现的结果(例如,空列表,类似“不可能”的字符串或引发错误)?(实际上,我只建议您输入有效的输入,或者在这种情况下允许未定义的行为,但这取决于您。)
Jonathan Allan

2
您可以放弃N的输入。对第二个问题可以。
McLinux

那么,每个数字的最低除数是多少?
totallyhuman

@totallyhuman不大-如果输入的是说[7,8,8]这是不可能的(因为使用2两个8在两个结果4秒)。此外,如果输入了说[7,30,30][7,2,2]是无效的,但[7,2,3][7,3,2]在其他之中会工作。
乔纳森·艾伦,

Answers:


5

05AB1E,13个字节

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

在线尝试!

我的Pyth答案的端口。

  • Ò得到的主要事实Ò每个RS。
  • 折叠为二进命令,â(C â rtesi â中由右至左与右相反/左操作数中的列表中的每个的两个元件之间的N个产品)。
  • €˜摊平 ach。
  • ʒ...}FILT ʒ RS那些满足以下条件:
    • ÷ 输入的成对整数除法。
    • D D重复(将项目的两个副本推入堆栈)。
    • Ù删除重复的元素,保持Ù NIQ Ù每个元素电子发生。
    • Q检查为电子Q uality。
  • θ 获取最后一个元素。

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先生17年

2

Pyth,15个字节

ef{I/VQT.nM*FPM

在这里尝试!

怎么样?

ef {I / VQT.nM * FPM | 完整的程序,它放弃了大小。
                |
             下午| 每个整数的素数分解。
           * F | 将笛卡尔乘积放在素数列表上。
        .nM | 展平每个。
 f | 过滤。
  {I / VQT | 过滤条件(使用变量T)。
    / V | 向量化整数除法...
      QT | 在输入和当前项目上。
  {I | 重复数据删除(删除重复数据)是否不变?
e | 拿最后一个元素。
                | 隐式输出结果。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.