[C10_ND_25] Chính phương

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Pascal, Python

Một tập hợp ~A = \{a_1, \ldots, a_k\}~ gồm ~k~ số tự nhiên khác nhau có tổng các phần tử là ~n~ gọi là tập sinh chính phương nếu tổng của bất kỳ ~k-1~ phần tử trong ~A~ đều là số chính phương.

Ví dụ: Tập ~A = \{1, 22, 41, 58\}~ gồm ~k = 4~ phần tử có tổng các phần tử ~n = 122~ là một tập sinh chính phương vì tổng ~3~ số bất kỳ trong ~A~ đều là số chính phương:

  • ~1 + 22 + 41 = 64 = 8^2~
  • ~1 + 22 + 58 = 81 = 9^2~
  • ~1 + 41 + 58 = 100 = 10^2~
  • ~22 + 41 + 58 = 121 = 11^2~

Yêu cầu

Cho hai số nguyên ~n~ và ~k~. Đếm số tập hợp ~A~ gồm ~k~ phần tử có tổng các phần tử là ~n~ và tổng của ~k-1~ phần tử bất kỳ trong tập này đều là số chính phương.

Chú ý: Hai tập được coi là khác nhau nếu tồn tại một phần tử có trong tập này và không có trong tập kia.

Dữ liệu đầu vào

Gồm hai số nguyên ~n~ và ~k~ ~(2 \le n \le 10000; 2 \le k \le 10)~.

Dữ liệu đầu ra

Gồm một số duy nhất là số tập ~A~ thỏa mãn tìm được.

Ràng buộc dữ liệu

  • Có 25% số test tương ứng với 25% số điểm có ~k = 2~ (tập ~A~ chỉ có ~2~ phần tử).
  • Có 50% số test tương ứng với 50% số điểm có ~k = 3~ (tập ~A~ chỉ có ~3~ phần tử).
  • Có 25% số test tương ứng với 25% số điểm không có ràng buộc gì thêm.

Ví dụ

Ví dụ 1
INPUT
20 2
OUTPUT
1

Giải thích: Có ~1~ tập tìm được là ~\{4, 16\}~.


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.