AI Empire Academy
CHUYÊN ĐỀ C++ THỰC CHIẾN

Bài tập Số học, Số nguyên tố & Giải thuật toán học trong C++

Toán học là nền móng của thuật toán. Nắm chắc các giải thuật số học kinh điển để giải các bài toán số lớn, chia dư và đếm tổ hợp nhanh chóng.

27

bài tập có chấm code

Bài tập theo chuyên đề, có đề bài, ví dụ và starter code riêng.

7

cơ bản

Củng cố nền tảng và làm quen với kỹ thuật cốt lõi.

12

trung bình

Kết hợp nhiều bước suy luận để vận dụng kiến thức.

8

nâng cao

Thử thách tối ưu, cấu trúc dữ liệu và thuật toán chuyên sâu.

Lộ trình thực hành đề xuất

Bước 1

Kiểm tra nguyên tố

Tối ưu hóa kiểm tra số nguyên tố đến căn bậc hai sqrt(N).

Bước 2

Sàng Eratosthenes

Lọc tất cả số nguyên tố nhỏ hơn N và tìm ước số nguyên tố nhỏ nhất/lớn nhất.

Bước 3

Ước chung lớn nhất (GCD)

Thuật toán Euclid tính GCD/LCM và giải phương trình đồng dư tuyến tính.

Bước 4

Lũy thừa nhanh Modulo

Tính (A^B) % MOD trong thời gian O(log B) và định lý Fermat nhỏ.

Lỗi thường gặp & Cách phòng tránh

•

Quên lấy dư modulo ở từng bước tính tích dẫn đến tràn số trước khi kịp chia dư.

•

Sàng Eratosthenes chạy quá kích thước bộ nhớ nếu mảng tĩnh vượt quá 10^7 phần tử.

Danh sách bài tập thực hành (27 bài)

Trong mỗi mức độ, bài tập được xếp từ dễ nhất đến khó nhất — hãy đi theo số bước.

Cơ bản 7 bài

Khởi động

Nhập xuất, biến, rẽ nhánh và các bước suy luận đơn giản.

cpp-248Bước 1Cơ bản

Chữ số lớn nhất của một số

Tách chữ số bằng % 10 và / 10 là kỹ thuật cơ bản cho mọi bài số học: kiểm tra đối xứng số, tính tổng chữ số, đếm chữ số. Bài này luyện tìm cực đại trên các chữ số.

cpp-210Bước 2Cơ bản

Ước chung lớn nhất bằng thuật toán Euclid

Ước chung lớn nhất dùng để rút gọn phân số và đồng bộ chu kỳ. Cách duyệt từng ước tốn O(min(a,b)), còn thuật toán Euclid chỉ mất O(log min(a,b)) nhờ hệ thức gcd(a,b) = gcd(b,…

cpp-211Bước 3Cơ bản

Bội chung nhỏ nhất của hai số

Bội chung nhỏ nhất dùng để quy đồng mẫu số và đồng bộ chu kỳ tác vụ. Duyệt bội tốn O(lcm), trong khi hệ thức lcm(a,b) = |a · b| / gcd(a,b) chỉ mất O(log…

cpp-213Bước 4Cơ bản

Kiểm tra số nguyên tố

Kiểm tra nguyên tố là bước mở đầu của mật mã và sàng số. Thử chia mọi số từ 2 tới n-1 tốn O(n); chỉ cần tới √(n) vì nếu n = u × v thì một thừa số không vượt quá √(n).

Làm quen

Vòng lặp, mảng một chiều, chuỗi và hàm ở mức cơ bản.

cpp-215Bước 5Cơ bản

Đếm số ước của một số

Số lượng ước quyết định nhiều tính chất số học: số nguyên tố có đúng hai ước, số chính phương có số ước lẻ. Duyệt tới √(n) và cộng theo từng cặp ước nhanh hơn nhiều so với duyệ…

cpp-216Bước 6Cơ bản

Kiểm tra số chính phương

Số chính phương bằng bình phương của một số nguyên. Trong C++, sqrt trả về số thực nên phải hiệu chỉnh kết quả để tránh sai số khi n lớn.

Trung bình 12 bài

Vận dụng

Dùng một kỹ thuật quen thuộc: sắp xếp, tìm kiếm, đếm, ngăn xếp.

cpp-247Bước 5Trung bình

Đếm số bit 1 trong biểu diễn nhị phân

Đếm bit 1 là thao tác cơ bản của lập trình hệ thống: kiểm tra cờ trạng thái, nén dữ liệu và tối ưu bộ nhớ. Phép n & 1 lấy bit thấp nhất và n >>= 1 dịch sang phải là đủ để duyệt toà…

Kết hợp kỹ thuật

Phối hợp hai kỹ thuật trong cùng một lời giải.

Nâng cao 8 bài

Thử thách

Thuật toán chuyên sâu: quy hoạch động, đồ thị, cây.

Chuyên sâu

Cấu trúc dữ liệu nâng cao và nhiều bước chứng minh.