Nguồn đề bài: http://vn.spoj.com/problems/COUNTCBG/
1. Đề bài COUNTCBG spoj
Với 1 số tự nhiên N(1<= N <= 10^9) ta có thể phân tích nó thành tổng của một số số tự nhiên liên tiếp( tất nhiên những số này phải nhỏ hơn N). Ví dụ với N = 5 ta có duy nhất 1 cách phân tích là 5 = 2+3. Bài toán đặt ra là cho số tự nhiên N, hãy cho biết có bao nhiêu cách phân tích số tự nhiên N thành tổng của các số tự nhiên liên tiếp.
Input
Gồm nhiều dòng, mỗi dòng chứa một số nguyên N. (Giới hạn : số dòng <= 100)
Output
Mỗi dòng ghi một số nguyên là số cách phân tích số N đọc được ở dòng tương ứng trong input.
Ví dụ
Input:
12
5
4
13
45
100
234
3
175
Output:
1
1
0
1
5
2
5
1
5
2. code tham khảo BCTICH và COUNTCBG:
a. Code COUNTCBG SPOJ
var n,kq,i:longint; f:text; begin assign(f,''); reset(f); while not eof(f) do begin kq:=0; readln(f,n); for i:=2 to trunc(sqrt(2*n)) do if 2*n mod i = 0 then if (i-1 + (2*n div i)) mod 2=0 then inc(kq); writeln(kq); end; close(f); end.
b. Code BCTICH PTIT
var n,kq,i,j,tt,tam:longint; f:text; begin assign(f,''); reset(f); readln(f,tt); for j:=1 to tt do begin kq:=0; readln(f,tam,n); for i:=2 to trunc(sqrt(2*n)) do if 2*n mod i = 0 then if (i-1 + (2*n div i)) mod 2=0 then inc(kq); writeln(tam,' ',kq); end; close(f); end.
code bị lỗi rồi
Hi bạn, code bị lỗi là lỗi như thế nào vậy bạn, mình vừa submit lại thì vẫn 100Đ mà bạn?
Bạn lưu ý là nộp bài tại đây nhé http://vn.spoj.com/problems/COUNTCBG/ và code bài COUNTCBG và BCTICH PTIT là khác cấu trúc đọc file nhé. bạn kiểm tra lại giúp mình nhé.
ad cho em xin ý tưởng bài này được không ạ?
Đây nha bạn:
Mình không hiểu lắm ạ. Tại sao (l+r) lại chỉ xét tới √2n ạ? Ad cho mình xin vd của việc tạo ra bộ nghiệm tương tự phần ta xét được không ạ?