最近的分区号


12

整数的分区数是将整数表示为正整数之和的方式的数目。

例如:

5
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1

有7种方式表示数字5,因此7是与数字5对应的分区号。

分区编号:OEIS:#A000041

方向

编写一个程序,以正整数作为输入,并输出生成两个最接近输入数字的分区号的两个数字。

  • 输入必须为1个正整数。
  • 如果输入不是分区号,则输出必须是2个不同的正整数,它们生成与输入号最接近的两个分区号。(如果两个分区号是其中一个输出号的相等候选者,那么选择哪个分区都没关系。)
  • 如果输入分区号,则输出必须是1个生成输入号的正整数。
  • 输入和输出可以采用任何合理的格式。
  • 您可以假设输入将不大于1亿(例如,输出将永远不大于95)。
  • 内置函数来计算分区号容许,与其他一起标准的漏洞
  • 这是,因此最少要赢得字节数。

分区编号:OEIS:#A000041

例子

Input: 66
Output: 11, 12

(与数字11和12对应的分区号是56和77,这是最接近66的两个分区号。)

Input: 42
Output: 10

(数字42已经是一个分区号,因此只需输出与该分区号相对应的数字即可。)

Input: 136
Output: 13, 14

(最接近136的两个分区号实际上都比136少(例如101和135),因此输出是13和14,而不是14和15。)

Input: 1
Output: 0   or   1

(在这种特殊情况下,0和1均为有效输出。)

Input: 2484
Output: 26, 25   or   26, 27

(这两种输出是有效的,因为2484等于d 姿态1958和3010)

Input: 4
Output: 3, 4

(对)


您没有定义什么是分区号
骄傲的haskeller 2014年

@proudhaskeller分区号是OEIS序列中链接的号。分区号的解释5在顶部。(如果您认为还不够清楚的话,我会加澄清。)
kukac67 2014年

1
这几乎是对早期分区问题的重复。
彼得·泰勒

Answers:


2

佩斯(53)

L?!b<b1sm&d*^_1tdy-b/*dt*3d2r_bhbJo^-QyN2U99<J-2qQyhJ

说明和更多的高尔夫跟随。


4

Python 2,179字节

Z=range(1,99)
R=Z+[1]
for i in Z:R[i]=sum(-(-1)**k*(3*k*k-k<=i*2and R[i-k*(3*k-1)/2])for k in range(-i,i+1)if k)
f=lambda n:zip(*sorted((abs(n-R[i]),i)for i in Z))[1][:2-(n in R)]

使用欧拉五角形定理中的递归公式。

致电f(2484)。输出是具有一个或两个数字的元组。


2

Mathematica,124 123字节

f@n_:=(p=SeriesCoefficient[1/Product[1-x^k,{k,#}],{x,0,#}]&;s=SortBy[Range@95,Abs[n-p@#]&];If[p@s[[1]]==n,s[[1]],s~Take~2])

分区编号的公式,取自OEIS页面。(可能会或可能不会作弊...我无法决定。)

用法:

In: f[136]

Out: {14, 13}

我不是要赢。而且我敢肯定,这可以进一步发展。

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.