You are on page 1of 3

Bài 1: Ước số

Với N!, ta phân tích thành thừa số nguyên tố:

Khi đó:

• Số ước số của N! là: (i+1)* (j+1)* …*(k+1)


• Tổng các ước số của N! là:

- Sub1: N≤100
Trường hợp học sinh không nắm công thức thì duyệt thông thường tính N! và
kết hợp xử lý xâu vì 100!<200 chữ số;

- Sub2: N≤104
Gọi mảng P là mảng số nguyên tố, duyệt i từ 1 đến n, ứng với mỗi i ta đếm
phân phối vào mảng P: Đpt(n2);

- Sub3: N≤106
Sử dụng thuật toán sàng số nguyên tố sau đó đếm phân phối vào mảng sàng số
nguyên tố còn tính lũy thừa ta sử dụng thuật toán chia để trị : Đpt(n*2logn).
Bài 2: Thư viện sách

Sub1: 𝑛 ≤ 10; [15 tests]

- Duyệt tam phân tất cả trường hợp

Sub2: 𝑛 ≤ 20; [15 tests]

QHD: F[I,s1,s2,h2]=h3 ( I là thứ tự sách , s1 là chiều rộng tập 1 , s2 là chiều rộng


tập 2 , h2 là chiều cao tập 2 , h3 là chiều cao tập 3 )

Có 3 trường hợp:

- Sách thứ I vào tập 1:


F[i+1,s1+t[i+1],s2,h2]=h3
- Sách thứ I vào tập 2:
F[i+1,s1,s2+t[i+1],max(h2,h[i+1])]=h3
- Sách thứ I vào tập 3:
F[i+1,s1,s2,h2]=max(h3,h[i+1]);

- Đpt(5*10^6)

Sub3: 𝑛 ≤ 70; [20 tests]

QHD: F[I,s1,s2]=h2+h3 ( I là thứ tự sách , s1 là chiều rộng tập 1 , s2 là chiều rộng


tập 2 , h2 là chiều cao tập 2 , h1 là chiều cao tập 1 )

Có 5 trường hợp:

- Sách thứ I vào tập 1:


F[i+1,s1+t[i+1],s2]=h2+h3;
- Sách thứ I vào tập 2 (s2>0):
F[i+1,s1,s2+t[i+1]]=h2+h3;
- Sách thứ I vào tập 2 (s2=0):
F[i+1,s1,s2+t[i+1]]=h[i+1]+h3;
- Sách thứ I vào tập 3 (s[i]-s1-s2>0):
F[i+1,s1,s2]=h2+h3;
- Sách thứ I vào tập 3 (s[i]-s1-s2=0):
F[i+1,s1,s2]=h2+h[i+1];

- Đpt(4*10^6)
Bài 3: Con đường bội của 2
- Sub1: với N≤30, M≤40 và 1 ≤ Ai, Bi ≤ N, Ai≠ Bi
Sử dụng thuật toán Floy Đpt(n3);

- Sub2: với N≤1000; M≤1000 và 1 ≤ Ai, Bi ≤ N, Ai≠ Bi


Sắp xếp lại độ dài của tất cả đường đi hai chiều theo thứ tự từ bé đến lớn. Sau
đó sử dụng tìm cây khung mang các giá trị tối thiểu ( mọi đường đi từ thành phố
này đến thành phố khác đều tối thiểu) , sau đó sử dụng DFS n lần ( mỗi lần 1 đỉnh
DFS đến tất cả các đỉnh còn lại), tính toán kết quả phụ thuộc vào mảng lưu số mũ:
Đpt(n2)

- Sub3: với N≤105; M≤2*105 và 1 ≤ Ai, Bi ≤ N, Ai≠ Bi


Tìm cây khung tương tự sub2 nhưng DFS chỉ 1 lần, theo đó mỗi khi ta đi qua 1
đường đi 2 chiều nối trực tiếp thì ta đếm được ta đã đi qua được k đỉnh, nhờ đó ta
biết được đường đi 2 chiều nối trực tiếp đó sẽ xuất hiện k*(n-k) lần trong tất cả các
đường đi từ thành phố này đến thành phố khác. Lưu số lần xuất hiện vào mảng lưu
số mũ: Đpt(n+m)

You might also like