COUNTCBG spoj – Phân tích số nguyên
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 = ...
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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. |