Xét dãy số sau: ~0, 0 + 1, 0 + 1 + 3, 0 + 1 + 3 + 5, . . . , 0 + 1 + 3 + . . . + (2n − 1), . . .~. Đây là dãy được tạo bởi tổng vài số tự nhiên lẻ đầu tiên và các số hạng của dãy đều là số chính phương (tức là bình phương của một số nguyên): ~0, 1, 4, 9, . . . , n^2, . . . ~.
Tổng quát hóa dãy này bằng cách thay số ~0~ ở đầu bởi một số nguyên ~k~, như vậy ta được dãy: ~k, k + 1, k + 1 + 3, k + 1 + 3 + 5, . . . , k + 1 + 3 + . . . + (2n − 1), . . .~. Tuy nhiên khác với trường hợp ~k = 0~ ở trên, dãy này chỉ có một vài số hạng là số chính phương.
Yêu cầu: Cho trước số nguyên ~k~, cần tìm số nguyên không âm nhỏ nhất sao cho bình phương của nó xuất hiện trong dãy số trên.
Dữ liệu vào
Một dòng chứa số nguyên duy nhất là ~k~ ~(−10^{12} ≤ k ≤ 10^{12})~.
Dữ liệu ra
Ghi ra một số nguyên không âm duy nhất sao cho bình phương của nó xuất hiện trong dãy số trên. Nếu trong dãy không có số chính phương nào, hay ghi ra xâu ~"none"~.
Giới hạn
- Có 8% số lượng test tương ứng 8% số điểm thỏa mãn ~0 ≤ k ≤ 1000~;
- Có 12% số lượng test tương ứng 12% số điểm thỏa mãn ~0 ≤ k ≤ 10^5~;
- Có 20% số lượng test tương ứng 20% số điểm thỏa mãn ~0 ≤ k ≤ 10^{12}~;
- Có 8% số lượng test tương ứng 8% số điểm thỏa mãn ~−1000 ≤ k ≤ 1000~;
- Có 12% số lượng test tương ứng 12% số điểm thỏa mãn ~−10^5 ≤ k ≤ 10^5~;
- 40% số lượng test còn lại tương ứng 40% số điểm thỏa mãn ~−10^{12} ≤ k ≤ 10^{12}~.
Sample Input 1
0
Sample Output 1
0
Sample Input 2
-5
Sample Output 2
2
Sample Input 3
2
Sample Output 3
none
Nguồn: Trại đông Bảo Lộc 2021 - thầy Đỗ Phan Thuận
Bình luận
Who asks nhưng mình vẫn cồ men
Tóm đề: tìm m nguyên không âm nhỏ nhất sao cho ~m^2 = k + n^2~
Dùng hằng đẳng thức ta suy ra được: ~k=m^2-n^2~ <=> ~k=(m-n)(m+n) ~
Vậy bài toán trở thành tìm cặp số a và b sao cho ~k=a*b~
Ta có thể tìm a và b trong ~O(sqrt(n))~ và mỗi a và b ta có thể lập hệ phương trình để tìm m: ~(m-n) = a ~ và ~ (m+n)= b ~
Từ đây suy ra ~2m = a+b ~ và kết quả là m nguyên không âm nhỏ nhất
Nhớ đổi dấu a và b nhen :>>