Hướng dẫn giải của Tổng phân số giai thừa lùi (RESUM - ***)
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
1. Tóm tắt đề bài
Cho số nguyên dương ~n~. Hãy tính tổng:
~ S = 1 + \frac{1}{2!} + \frac{1}{3!} + \dots + \frac{1}{n!} = 1 + \sum_{i=2}^{n} \frac{1}{i!} ~
(Quy ước: Với ~n = 1~, tổng ~S = 1~).
- Dữ liệu vào (Input): Số nguyên dương ~n~ (~1 \le n \le 10~).
- Dữ liệu ra (Output): In ra giá trị của ~S~ làm tròn đến đúng 5 chữ số thập phân.
2. Phân tích bài toán & Giới hạn
- Giới hạn ~n~: ~1 \le n \le 10~.
- Giới hạn ~n~ cực kỳ nhỏ (~n \le 10~), giá trị ~10! = 3\,628\,800~ hoàn toàn nằm gọn trong kiểu số nguyên cơ bản mà không lo tràn số.
- Đặc điểm tính toán:
- Đây là bài toán tính toán với số thực. Do đó, cần sử dụng kiểu dữ liệu số thực có độ chính xác cao (
doubletrong C++/Pascal, hoặc kiểu số thực mặc định trong Python) để tránh sai số dấu phẩy động. - Mối liên hệ giữa hai số hạng liên tiếp: ~\frac{1}{i!} = \frac{1}{(i - 1)!} \times \frac{1}{i}~ Ta có thể tận dụng điều này để tính dồn số hạng hiện tại từ số hạng trước mà không cần tính lại giai thừa từ đầu.
- Đây là bài toán tính toán với số thực. Do đó, cần sử dụng kiểu dữ liệu số thực có độ chính xác cao (
3. Thuật toán xử lý
Ý tưởng:
- Khởi tạo biến tổng
S = 1.0. - Khởi tạo giá trị của số hạng giai thừa hiện tại
fact = 1.0(tương ứng với ~1!~). - Dùng vòng lặp cho biến ~i~ chạy từ ~2~ đến ~n~:
- Cập nhật giai thừa:
fact = fact * i. - Cộng dồn phân số vào tổng:
S = S + 1.0 / fact.
- Cập nhật giai thừa:
- In kết quả
Sđịnh dạng đúng 5 chữ số sau dấu phẩy thập phân (ví dụ: dùngfixedvàsetprecision(5)trong C++
- Khởi tạo biến tổng
Độ phức tạp:
- Thời gian: ~\mathcal{O}(n)~ — với ~n \le 10~, thuật toán chỉ mất tối đa ~10~ phép tính, thời gian thực thi gần như tức thời (~< 0.001~ giây).
- Không gian (bộ nhớ): ~\mathcal{O}(1)~.
Đang tải...