Số phân vùng gần nhất


12

Số lượng phân vùng của một số nguyên là số cách mà số nguyên có thể được biểu diễn dưới dạng tổng của các số nguyên dương.

Ví dụ:

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

Có 7 cách để biểu thị số 5, do đó 7 là số phân vùng tương ứng với số 5.

Số phân vùng: OEIS: # A000041

Hướng

Viết chương trình lấy số nguyên dương làm đầu vào và xuất hai số tạo hai số phân vùng gần nhất thành số đầu vào.

  • Đầu vào phải là 1 số nguyên dương.
  • Nếu đầu vào không phải là số phân vùng, đầu ra phải là 2 số nguyên dương khác nhau tạo ra hai số phân vùng gần nhất với số đầu vào. (Nếu hai số phân vùng là ứng cử viên bằng nhau cho một trong các số đầu ra, thì bạn chọn loại nào không quan trọng.)
  • Nếu đầu vào số phân vùng, đầu ra phải là 1 số nguyên dương tạo ra số đầu vào.
  • Đầu vào và đầu ra có thể ở bất kỳ định dạng hợp lý.
  • Bạn có thể cho rằng đầu vào sẽ không lớn hơn 100 triệu (ví dụ: đầu ra sẽ không bao giờ lớn hơn 95).
  • Các hàm tích hợp để tính toán số phân vùng không được phép, cùng với các lỗ hổng Tiêu chuẩn khác .
  • Đây là , vì vậy số byte ít nhất sẽ thắng.

Số phân vùng: OEIS: # A000041

Ví dụ

Input: 66
Output: 11, 12

(Số phân vùng tương ứng với số 11 và 12 là 56 và 77, là hai số phân vùng gần nhất với 66.)

Input: 42
Output: 10

(Số 42 đã là số phân vùng, vì vậy chỉ cần xuất số tương ứng với số phân vùng.)

Input: 136
Output: 13, 14

(Hai số phân vùng gần nhất với 136 thực sự là cả BÀI hơn 136 (ví dụ 101 và 135), do đó, đầu ra là 13 và 14 trái ngược với 14 và 15.)

Input: 1
Output: 0   or   1

(Cả 0 và 1 đều là đầu ra hợp lệ trong trường hợp đặc biệt này.)

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

(Cả hai kết quả đầu ra có giá trị, bởi vì năm 2484 là tương đương d i lập trường từ năm 1958 và 3010.)

Input: 4
Output: 3, 4

(Yup)


Bạn đã không xác định số phân vùng là gì
tự hào

@proudhaskeller Số phân vùng là các số trong chuỗi OEIS được liên kết. Giải thích cho những gì số phân vùng cho 5là ở trên cùng. (Tôi sẽ thêm làm rõ nếu bạn nghĩ rằng nó không đủ rõ ràng.)
kukac67 26/12/14

1
Điều này rất gần với việc là một bản sao của câu hỏi phân vùng trước đó .
Peter Taylor

Câu trả lời:


2

Bình thường , 53

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

Giải thích và chơi golf nhiều hơn để làm theo.


4

Python 2, 179 byte

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)]

Sử dụng công thức đệ quy từ định lý ngũ giác của Euler .

Gọi với f(2484). Đầu ra là một tuple với một hoặc hai số.


2

Toán học, 124 123 byte

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])

Công thức cho các số phân vùng được lấy từ trang OEIS . (Có thể hoặc không thể gian lận ... Tôi không thể quyết định.)

Sử dụng:

In: f[136]

Out: {14, 13}

Tôi không trả lời để giành chiến thắng. Và tôi chắc chắn rằng điều này có thể được chơi golf hơn nữa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.