1000 BT Kỹ thuật lập trình của Thầy Nguyễn Trần Tấn Minh Khang (Giải bằng Python)

🐍 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!


Đăng nhận xét

0 Nhận xét