🐍 Kỹ thuật lập trình cơ bản với Python 🚀
Học lập trình không khó, khó là kiên trì đủ lâu để nhìn thấy kết quả.
I. Các Bài Toán Tính Tổng Đơn Giản
1. Tính Tổng Cấp Số Cộng: $$S(n) = 1 + 2 + 3 + \dots + n$$
Công thức Toán: $$S(n) = \frac{n(n+1)}{2}$$
2. Tính Tổng Bình Phương: $$S(n) = 1^2 + 2^2 + 3^2 + \dots + n^2$$
Công thức Toán: $$S(n) = \frac{n(n+1)(2n+1)}{6}$$
3. Tính Tổng Chuỗi Hài Hòa: $$S(n) = 1 + \frac{1}{2} + \frac{1}{3} + \dots + \frac{1}{n}$$
Sử dụng vòng lặp để tính tổng các số thập phân.
4. Tính Tổng Phân Số Mẫu Chẵn: $$S(n) = \frac{1}{2} + \frac{1}{4} + \dots + \frac{1}{2n}$$
def bai_4_tong_mau_chan(n):
"""Tính S(n) = 1/2 + 1/4 + ... + 1/(2n)"""
S_n = 0.0
for i in range(1, n + 1):
S_n += 1 / (2 * i)
return S_n
# Ví dụ: print(bai_4_tong_mau_chan(2)) # Kết quả: 0.75
5. Tính Tổng Phân Số Mẫu Lẻ: $$S(n) = \frac{1}{1} + \frac{1}{3} + \frac{1}{5} + \dots + \frac{1}{2n+1}$$
def bai_5_tong_mau_le(n):
"""Tính S(n) = 1/1 + 1/3 + 1/5 + ... + 1/(2n+1)"""
S_n = 0.0
for i in range(0, n + 1): # Lặp với i=0 cho số hạng 1/(2*0+1) = 1/1
S_n += 1 / (2 * i + 1)
return S_n
# Ví dụ: print(bai_5_tong_mau_le(1)) # Kết quả: 1.3333...
II. Các Bài Toán Tổng Đặc Biệt
6. Tính Tổng Phân Tích Hiệu: $$S(n) = \frac{1}{1 \times 2} + \frac{1}{2 \times 3} + \dots + \frac{1}{n \times (n+1)}$$
Đây là tổng Telescoping (tổng phân tích thành hiệu): $$\frac{1}{k(k+1)} = \frac{1}{k} - \frac{1}{k+1}$$ Công thức Toán: $$S(n) = \frac{n}{n+1}$$
def bai_6_tong_phan_tich_hieu(n):
"""Tính S(n) = 1/(1*2) + 1/(2*3) + ... + 1/(n*(n+1))"""
# Sử dụng công thức rút gọn S(n) = n/(n+1)
S_n = n / (n + 1)
return S_n
# Ví dụ: print(bai_6_tong_phan_tich_hieu(3)) # Kết quả: 0.75
7. Tính Tổng Phân Số Tùy Ý: $$S(n) = \frac{1}{2} + \frac{3}{5} + \frac{5}{8} + \dots + \frac{2n+1}{3n+2}$$
def bai_7_tong_phan_so_phuc_tap(n):
"""Tính S(n) = 1/2 + 3/5 + 5/8 + ... + (2n+1)/(3n+2)"""
S_n = 0.0
for i in range(0, n + 1):
tu_so = 2 * i + 1
mau_so = 3 * i + 2
S_n += tu_so / mau_so
return S_n
# Ví dụ: print(bai_7_tong_phan_so_phuc_tap(1)) # Kết quả: 1.1
8. Tính Tổng Phân Số Rút Gọn: $$S(n) = \frac{1}{2} + \frac{2}{4} + \frac{3}{6} + \dots + \frac{n}{2n}$$
Mỗi số hạng $\frac{k}{2k}$ đều bằng $\frac{1}{2}$. Công thức Toán: $$S(n) = \frac{n}{2}$$
def bai_8_tong_phan_so_rut_gon(n):
"""Tính S(n) = 1/2 + 2/4 + 3/6 + ... + n/(2n)"""
# S(n) = n * 1/2
S_n = n / 2
return S_n
# Ví dụ: print(bai_8_tong_phan_so_rut_gon(4)) # Kết quả: 2.0
III. Các Bài Toán Lũy Thừa và Giai Thừa
9. Tính Giai Thừa: $$T(n) = 1 \times 2 \times 3 \times \dots \times n = n!$$
def bai_9_tinh_giai_thua(n):
"""Tính T(n) = 1 * 2 * 3 * ... * n (hay n!)"""
T_n = 1
for i in range(1, n + 1):
T_n *= i
return T_n
# Ví dụ: print(bai_9_tinh_giai_thua(4)) # Kết quả: 24
10. Tính Lũy Thừa: $$T(x, n) = x^n$$
def bai_10_tinh_luy_thua(x, n):
"""Tính T(x, n) = x^n"""
# Sử dụng toán tử lũy thừa **
T_xn = x ** n
return T_xn
# Ví dụ: print(bai_10_tinh_luy_thua(2, 3)) # Kết quả: 8
🔥 Tiếp tục Lập trình!
🔢 10 Bài Toán Python Cơ Bản: Lũy Thừa, Tích Lũy và Ước Số (11-20)
Phần này bao gồm các bài toán tính tích dãy số, tổng lũy thừa và các thao tác cơ bản với ước số của số nguyên dương $n$.
I. Tích Lũy và Tổng Lũy Thừa
11. Tính Tổng Giai Thừa Liên Tiếp: $$S(n) = 1 + (1 \times 2) + (1 \times 2 \times 3) + \dots + (1 \times 2 \times 3 \times \dots \times n)$$
Hay $$S(n) = 1! + 2! + 3! + \dots + n!$$
def bai_11_tong_giai_thua(n):
"""Tính S(n) = 1! + 2! + ... + n!"""
S_n = 0
giai_thua_hien_tai = 1
for i in range(1, n + 1):
giai_thua_hien_tai *= i # Tính i!
S_n += giai_thua_hien_tai
return S_n
# Ví dụ: print(bai_11_tong_giai_thua(3)) # Kết quả: 9 (1 + 2 + 6)
12. Tính Tổng Lũy Thừa Cơ Bản: $$S(n) = x + x^2 + x^3 + \dots + x^n$$
Đây là tổng của cấp số nhân. Công thức Toán: $$S(n) = \frac{x(x^n - 1)}{x-1} \quad \text{(khi } x \neq 1 \text{)}$$
def bai_12_tong_luy_thua_co_ban(x, n):
"""Tính S(n) = x + x^2 + x^3 + ... + x^n"""
S_n = 0
for i in range(1, n + 1):
S_n += x ** i
return S_n
# Ví dụ: print(bai_12_tong_luy_thua_co_ban(2, 3)) # Kết quả: 14 (2+4+8)
13. Tính Tổng Lũy Thừa Mẫu Chẵn: $$S(n) = x^2 + x^4 + \dots + x^{2n}$$
Tổng cấp số nhân với số hạng đầu $a=x^2$ và công bội $q=x^2$.
def bai_13_tong_luy_thua_chan(x, n):
"""Tính S(n) = x^2 + x^4 + ... + x^(2n)"""
S_n = 0
for i in range(1, n + 1):
S_n += x ** (2 * i)
return S_n
# Ví dụ: print(bai_13_tong_luy_thua_chan(2, 2)) # Kết quả: 20 (4+16)
14. Tính Tổng Lũy Thừa Mẫu Lẻ: $$S(n) = x + x^3 + x^5 + \dots + x^{2n+1}$$
Tổng cấp số nhân với số hạng đầu $a=x$ và công bội $q=x^2$.
def bai_14_tong_luy_thua_le(x, n):
"""Tính S(n) = x + x^3 + x^5 + ... + x^(2n+1)"""
S_n = 0
for i in range(0, n + 1): # i=0 cho x^(2*0+1)=x
S_n += x ** (2 * i + 1)
return S_n
# Ví dụ: print(bai_14_tong_luy_thua_le(2, 1)) # Kết quả: 10 (2+8)
15. Tính Tổng Phân Thức Mẫu Là Tổng Số: $$S(n) = 1 + \frac{x}{1+2} + \frac{x^2}{1+2+3} + \dots + \frac{x^{n}}{1+2+3+\dots+n}$$
Mẫu số là tổng cấp số cộng $T_k = \sum_{i=1}^k i = \frac{k(k+1)}{2}$.
def bai_15_tong_phan_thuc_mau_tong(x, n):
"""Tính S(n) = 1 + x/3 + x^2/6 + ... + x^n/(1+...+n)"""
S_n = 1.0 # Số hạng đầu tiên (k=0)
tong_mau_so = 1 # Tổng 1+2+...+k. Bắt đầu với T1=1
for k in range(1, n + 1):
tong_mau_so += k
# Số hạng k (bắt đầu từ k=1)
term = (x ** k) / tong_mau_so
S_n += term
return S_n
# Ví dụ: print(bai_15_tong_phan_thuc_mau_tong(2, 2)) # Kết quả: 1 + 2/3 + 4/6 = 2.333...
16. Tính Tổng Phân Thức Mẫu Là Giai Thừa: $$S(n) = 1 + \frac{x}{1!} + \frac{x^2}{2!} + \frac{x^3}{3!} + \dots + \frac{x^n}{n!}$$
Đây là xấp xỉ của hàm mũ $$e^x$$ (chuỗi Taylor).
def bai_16_tong_phan_thuc_mau_giai_thua(x, n):
"""Tính S(n) = 1 + x/1! + x^2/2! + ... + x^n/n!"""
S_n = 1.0 # Số hạng đầu tiên (k=0)
giai_thua_hien_tai = 1
for k in range(1, n + 1):
giai_thua_hien_tai *= k # Tính k!
# Số hạng k
term = (x ** k) / giai_thua_hien_tai
S_n += term
return S_n
# Ví dụ: print(bai_16_tong_phan_thuc_mau_giai_thua(1, 3)) # Kết quả: 2.666... (1 + 1/1 + 1/2 + 1/6)
III. Các Dãy Tổng Đặc Biệt
17. Tính Tổng Phân Thức Mẫu Giai Thừa (Bỏ 1): $$S(n) = x + \frac{x^2}{2!} + \frac{x^3}{3!} + \dots + \frac{x^n}{n!}$$
Tương tự Bài 16, nhưng thiếu số hạng đầu tiên (1).
def bai_17_tong_phan_thuc_mau_giai_thua_start_x(x, n):
"""Tính S(n) = x + x^2/2! + ... + x^n/n!"""
S_n = 0.0
giai_thua_hien_tai = 1 # 0!
for k in range(1, n + 1):
giai_thua_hien_tai *= k # Tính k!
# Số hạng k
term = (x ** k) / giai_thua_hien_tai
S_n += term
return S_n
# Ví dụ: print(bai_17_tong_phan_thuc_mau_giai_thua_start_x(1, 3)) # Kết quả: 1.666... (1/1 + 1/2 + 1/6)
18. Tính Tổng Chuỗi Cosine (Bậc Chẵn): $$S(n) = 1 + \frac{x^2}{2!} + \frac{x^4}{4!} + \dots + \frac{x^{2n}}{(2n)!}$$
Đây là các số hạng dương của chuỗi Taylor của hàm $\cosh(x)$ hoặc $\cos(x)$ (nếu bỏ qua dấu).
def factorial(k):
# Hàm tính giai thừa (sử dụng lại cho dễ đọc)
res = 1
for i in range(1, k + 1):
res *= i
return res
def bai_18_tong_chuoi_chan_giai_thua(x, n):
"""Tính S(n) = 1 + x^2/2! + x^4/4! + ... + x^(2n)/(2n)!"""
S_n = 1.0 # Số hạng đầu tiên (k=0)
for k in range(1, n + 1):
giai_thua_2k = factorial(2 * k) # Tính (2k)!
# Số hạng k
term = (x ** (2 * k)) / giai_thua_2k
S_n += term
return S_n
# Ví dụ: print(bai_18_tong_chuoi_chan_giai_thua(1, 1)) # Kết quả: 1.5 (1 + 1/2!)
19. Tính Tổng Chuỗi Sine (Bậc Lẻ): $$S(n) = 1 + x + \frac{x^3}{3!} + \frac{x^5}{5!} + \dots + \frac{x^{2n+1}}{(2n+1)!}$$
Đây là tổng của $1 + x$ cộng với chuỗi Taylor của $\sinh(x)$ (hàm hyperbolic sine).
# Sử dụng lại hàm factorial(k) từ Bài 18
def bai_19_tong_chuoi_le_giai_thua(x, n):
"""Tính S(n) = 1 + x + x^3/3! + x^5/5! + ... + x^(2n+1)/(2n+1)!"""
S_n = 1.0 + x # Số hạng đầu tiên (1) và số hạng thứ hai (x)
for k in range(1, n + 1): # Lặp từ x^3/3! trở đi
mau_so = 2 * k + 1
giai_thua_mau = factorial(mau_so) # Tính (2k+1)!
# Số hạng k
term = (x ** mau_so) / giai_thua_mau
S_n += term
return S_n
# Ví dụ: print(bai_19_tong_chuoi_le_giai_thua(1, 1)) # Kết quả: 2.166... (1 + 1 + 1/6)
IV. Các Bài Toán về Ước Số
20. Liệt kê **tất cả** các **ước số** của số nguyên dương $n$.
def bai_20_liet_ke_uoc_so(n):
"""Liệt kê tất cả các ước số của số nguyên dương n."""
uoc_so = []
# Chỉ cần kiểm tra đến căn bậc hai của n để tối ưu tốc độ
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
uoc_so.append(i)
# Nếu i không phải là căn bậc hai (ví dụ: 100/10=10), thì thêm cả n/i
if i * i != n:
uoc_so.append(n // i)
# Sắp xếp các ước số để hiển thị đẹp hơn
return sorted(uoc_so)
# Ví dụ: print(bai_20_liet_ke_uoc_so(12)) # Kết quả: [1, 2, 3, 4, 6, 12]
Tiếp theo, chúng ta sẽ khám phá các phép tính tổng, tích và đếm với các ước số trong Bài 21 đến 30!
🔍 10 Bài Toán Python Cơ Bản: Phân tích Ước số và Số học Đặc biệt (21-30)
Phần này đi sâu vào các phép tính thống kê (tổng, tích, đếm) trên các ước số của số nguyên dương $n$, cùng với các thuật toán kiểm tra tính chất số học quan trọng.
I. Thống Kê Ước Số
21. Tính **tổng tất cả** các **ước số** của số nguyên dương $n$.
def bai_21_tong_uoc_so(n):
"""Tính tổng tất cả các ước số của n."""
tong = 0
# Ta chỉ cần lặp đến căn bậc hai của n để tối ưu
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
tong += i # Ước số i
j = n // i
if i != j:
tong += j # Ước số n/i (nếu i không phải căn bậc hai)
return tong
# Ví dụ: print(bai_21_tong_uoc_so(12)) # Kết quả: 28 (1+2+3+4+6+12)
22. Tính **tích tất cả** các **ước số** của số nguyên dương $n$.
Công thức Toán: Tích các ước số của $n$ là $$n^{d(n)/2}$$, trong đó $$d(n)$$ là số lượng ước số của $n$.
def bai_22_tich_uoc_so(n):
"""Tính tích tất cả các ước số của n."""
tich = 1
# Dùng vòng lặp nhân từng ước số
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
tich *= i
j = n // i
if i != j:
tich *= j
return tich
# Ví dụ: print(bai_22_tich_uoc_so(6)) # Kết quả: 36 (1*2*3*6)
23. Đếm **số lượng** các **ước số** của số nguyên dương $n$.
Số lượng ước số thường được ký hiệu là $$d(n)$$ hoặc $$\tau(n)$$.
def bai_23_dem_so_luong_uoc_so(n):
"""Đếm số lượng ước số của n."""
dem = 0
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
if i * i == n:
dem += 1 # Ước kép (i = n/i)
else:
dem += 2 # Hai ước i và n/i
return dem
# Ví dụ: print(bai_23_dem_so_luong_uoc_so(12)) # Kết quả: 6 (1, 2, 3, 4, 6, 12)
24. Liệt kê **tất cả** các **ước số lẻ** của số nguyên dương $n$.
def bai_24_liet_ke_uoc_le(n):
"""Liệt kê tất cả các ước số lẻ của n."""
uoc_le = []
for i in range(1, n + 1):
if n % i == 0 and i % 2 != 0:
uoc_le.append(i)
return uoc_le
# Ví dụ: print(bai_24_liet_ke_uoc_le(12)) # Kết quả: [1, 3]
25. Tính **tổng tất cả** các **ước số chẵn** của số nguyên dương $n$.
def bai_25_tong_uoc_chan(n):
"""Tính tổng tất cả các ước số chẵn của n."""
tong = 0
for i in range(1, n + 1):
if n % i == 0 and i % 2 == 0:
tong += i
return tong
# Ví dụ: print(bai_25_tong_uoc_chan(12)) # Kết quả: 24 (2+4+6+12)
26. Tính **tích tất cả** các **ước số lẻ** của số nguyên dương $n$.
def bai_26_tich_uoc_le(n):
"""Tính tích tất cả các ước số lẻ của n."""
tich = 1
for i in range(1, n + 1):
if n % i == 0 and i % 2 != 0:
tich *= i
return tich
# Ví dụ: print(bai_26_tich_uoc_le(12)) # Kết quả: 3 (1*3)
27. Đếm **số lượng** các **ước số chẵn** của số nguyên dương $n$.
def bai_27_dem_uoc_chan(n):
"""Đếm số lượng ước số chẵn của n."""
dem = 0
for i in range(1, n + 1):
if n % i == 0 and i % 2 == 0:
dem += 1
return dem
# Ví dụ: print(bai_27_dem_uoc_chan(12)) # Kết quả: 4 (2, 4, 6, 12)
28. Tính **tổng các ước số nhỏ hơn chính nó** (Ước số thực sự).
Tổng này ký hiệu là $$\sigma(n) - n$$, trong đó $$\sigma(n)$$ là tổng tất cả các ước số.
def bai_28_tong_uoc_nho_hon_n(n):
"""Tính tổng các ước số nhỏ hơn chính n."""
tong = 0
# Lặp đến n-1
for i in range(1, n):
if n % i == 0:
tong += i
return tong
# Ví dụ: print(bai_28_tong_uoc_nho_hon_n(12)) # Kết quả: 16 (1+2+3+4+6)
29. Tìm **ước số lẻ lớn nhất** của số nguyên dương $n$.
Tìm ước lẻ lớn nhất bằng cách liên tục chia $$n$$ cho 2 cho đến khi nó trở thành số lẻ.
def bai_29_uoc_le_lon_nhat(n):
"""Tìm ước số lẻ lớn nhất của n."""
if n == 0:
return 0
# Chia n cho 2 liên tục đến khi nó là số lẻ
while n % 2 == 0:
n //= 2
return n
# Ví dụ: print(bai_29_uoc_le_lon_nhat(100)) # Kết quả: 25
30. Kiểm tra số nguyên dương $n$ có phải là **số hoàn thiện** hay không?
Số hoàn thiện là số mà **tổng các ước số thực sự** (Bài 28) bằng chính nó. Ví dụ: $$6 = 1 + 2 + 3$$
def bai_30_kiem_tra_so_hoan_thien(n):
"""Kiểm tra n có phải là số hoàn thiện hay không."""
if n <= 0:
return False
# Tái sử dụng logic từ Bài 28
tong_uoc_thuc_su = 0
for i in range(1, n):
if n % i == 0:
tong_uoc_thuc_su += i
return tong_uoc_thuc_su == n
# Ví dụ: print(bai_30_kiem_tra_so_hoan_thien(6)) # Kết quả: True
Các bài toán tiếp theo (31-40) sẽ tập trung vào Số Nguyên Tố, Căn Thức Lồng Nhau và Biểu Thức Phức tạp!
🌟 10 Bài Toán Python Cơ Bản: Số Nguyên Tố, Căn Thức và Tính Toán Phức Tạp (31-40)
Phần này tập trung vào các thuật toán kiểm tra tính chất số học, phân tích số nguyên tố và các bài toán tính tổng/biểu thức lồng nhau.
I. Số Nguyên Tố và Số Học
31. Kiểm tra số nguyên dương $n$ có phải là **số nguyên tố** hay không?
Số nguyên tố là số chỉ có hai ước số là 1 và chính nó. Ta chỉ cần kiểm tra các ước từ 2 đến $$\sqrt{n}$$.
import math
def bai_31_kiem_tra_so_nguyen_to(n):
"""Kiểm tra n có phải là số nguyên tố hay không."""
if n < 2:
return False
# Kiểm tra các ước từ 2 đến căn bậc hai của n
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
# Ví dụ: print(bai_31_kiem_tra_so_nguyen_to(13)) # Kết quả: True
32. Kiểm tra số nguyên dương $n$ có phải là **số chính phương** hay không?
Số chính phương là số bằng bình phương của một số nguyên ($$n = k^2$$).
import math
def bai_32_kiem_tra_so_chinh_phuong(n):
"""Kiểm tra n có phải là số chính phương hay không."""
if n < 0:
return False
can_n = int(math.sqrt(n))
return can_n * can_n == n
# Ví dụ: print(bai_32_kiem_tra_so_chinh_phuong(25)) # Kết quả: True
33. Đếm **số lượng số nguyên tố** từ 1 đến $n$.
Ta dùng lại hàm kiểm tra số nguyên tố (Bài 31) để đếm.
# Hàm kiểm tra số nguyên tố từ Bài 31 cần được định nghĩa trước
def bai_33_dem_so_nguyen_to(n):
"""Đếm số lượng số nguyên tố từ 1 đến n."""
dem = 0
for i in range(1, n + 1):
if bai_31_kiem_tra_so_nguyen_to(i):
dem += 1
return dem
# Ví dụ: print(bai_33_dem_so_nguyen_to(10)) # Kết quả: 4 (2, 3, 5, 7)
34. Tìm **ước số nguyên tố lớn nhất** của số nguyên dương $n$.
Thực hiện phân tích thừa số nguyên tố cho đến khi $$n$$ chỉ còn lại 1.
def bai_34_uoc_so_nguyen_to_lon_nhat(n):
"""Tìm ước số nguyên tố lớn nhất của n."""
uoc_lon_nhat = 1
i = 2
temp = n
while i * i <= temp:
if temp % i == 0:
uoc_lon_nhat = i
while temp % i == 0:
temp //= i
i += 1
if temp > 1: # Nếu sau khi chia hết, temp vẫn còn (>1) thì nó là ước nguyên tố lớn nhất
uoc_lon_nhat = temp
return uoc_lon_nhat
# Ví dụ: print(bai_34_uoc_so_nguyen_to_lon_nhat(120)) # Kết quả: 5
II. Tính Toán Căn Thức và Tổng Lồng Nhau
35. Tính $$S(n) = \sqrt{2 + \sqrt{2 + \sqrt{2 + \dots + \sqrt{2}}}}$$ có $n$ dấu căn.
Ta tính từ trong ra ngoài (vòng lặp $n$ lần).
import math
def bai_35_can_bat_thang(n):
"""Tính S(n) = sqrt(2 + sqrt(2 + ... + sqrt(2))) có n dấu căn."""
S_n = 0
# Lặp n lần
for _ in range(n):
S_n = math.sqrt(2 + S_n)
return S_n
# Ví dụ: print(bai_35_can_bat_thang(3)) # Kết quả: 1.98...
36. Tính $$S(n) = \sqrt{1 + \sqrt{1 + \sqrt{1 + \dots + \sqrt{1}}}}$$ có $n$ dấu căn.
Tương tự Bài 35, khi $n \to \infty$, giá trị này tiến đến tỷ lệ vàng $$\phi = \frac{1+\sqrt{5}}{2} \approx 1.618$$.
import math
def bai_36_can_ty_le_vang(n):
"""Tính S(n) = sqrt(1 + sqrt(1 + ... + sqrt(1))) có n dấu căn."""
S_n = 0
for _ in range(n):
S_n = math.sqrt(1 + S_n)
return S_n
# Ví dụ: print(bai_36_can_ty_le_vang(5)) # Kết quả: 1.618...
37. Tính $$S(n) = \sqrt{n + \sqrt{n-1 + \sqrt{n-2 + \dots + \sqrt{2 + \sqrt{1}}}}}$$ có $n$ dấu căn.
Ta lặp ngược từ $i=1$ đến $n$.
import math
def bai_37_can_bat_thang_giam_dan(n):
"""Tính S(n) = sqrt(n + sqrt(n-1 + ... + sqrt(1))) có n dấu căn."""
S_n = 0 # Biểu thức trong cùng là căn của 1
# Lặp từ i = 1 đến n (Tính từ trong ra ngoài)
for i in range(1, n + 1):
S_n = math.sqrt(i + S_n)
return S_n
# Ví dụ: print(bai_37_can_bat_thang_giam_dan(3)) # Kết quả: 2.57... (sqrt(3 + sqrt(2 + sqrt(1))))
38. Tính $$S(n) = 1 + \frac{1}{1+2} + \frac{1}{1+2+3} + \dots + \frac{1}{1+2+\dots+n}$$
Mẫu số là tổng cấp số cộng $$\frac{k(k+1)}{2}$$. Số hạng tổng quát: $$\frac{1}{k(k+1)/2} = \frac{2}{k(k+1)}$$
def bai_38_tong_phan_thuc_mau_tong(n):
"""Tính S(n) = 1 + 1/3 + 1/6 + ... + 1/(1+...+n)"""
S_n = 0.0
tong_mau_so = 0 # Tổng 1+2+...+k
for k in range(1, n + 1):
tong_mau_so += k
# Số hạng k
term = 1.0 / tong_mau_so
S_n += term
return S_n
# Ví dụ: print(bai_38_tong_phan_thuc_mau_tong(3)) # Kết quả: 1.5 (1/1 + 1/3 + 1/6)
39. Tính $$S(n) = 1 + \frac{1}{1!} + \frac{1}{2!} + \frac{1}{3!} + \dots + \frac{1}{n!}$$
Đây là xấp xỉ của hằng số $$e \approx 2.718$$.
def bai_39_tong_phan_thuc_giai_thua(n):
"""Tính S(n) = 1 + 1/1! + 1/2! + ... + 1/n!"""
S_n = 1.0 # Số hạng đầu tiên 1/0! = 1
giai_thua_hien_tai = 1
for k in range(1, n + 1):
giai_thua_hien_tai *= k # Tính k!
# Số hạng k
term = 1.0 / giai_thua_hien_tai
S_n += term
return S_n
# Ví dụ: print(bai_39_tong_phan_thuc_giai_thua(3)) # Kết quả: 2.666...
40. Tính $$S(n) = \sqrt{x^n + \sqrt{x^{n-1} + \sqrt{x^{n-2} + \dots + \sqrt{x^2 + \sqrt{x}}}}}$$ có $n$ dấu căn.
Ta lặp ngược từ $$i=1$$ (bên trong cùng) đến $$n$$ (bên ngoài cùng).
import math
def bai_40_can_luy_thua(x, n):
"""Tính S(n) = sqrt(x^n + sqrt(x^(n-1) + ... + sqrt(x))) có n dấu căn."""
S_n = 0 # Giá trị căn trong cùng ban đầu (trước sqrt(x))
# Lặp từ i = 1 (trong cùng) đến n (ngoài cùng)
for i in range(1, n + 1):
luy_thua = x ** i
# Biểu thức hiện tại = sqrt(x^i + biểu thức trước đó)
S_n = math.sqrt(luy_thua + S_n)
return S_n
# Ví dụ: print(bai_40_can_luy_thua(2, 3)) # Kết quả: 3.328...
Phần tiếp theo (Bài 41-50) sẽ tập trung vào các dạng tổng phức tạp, thao tác với chữ số và tìm chữ số lớn nhất/nhỏ nhất!

0 Nhận xét