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 = 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.

5 thoughts on “COUNTCBG spoj – Phân tích số nguyên

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *