Cho số nguyên n và số hạng m. Tính tổng: n + nn + nnn + ... (m số hạng). Ví dụ: n=3, m=4 → 3 + 33 + 333 + 3333 = 3702.
Quan sát quy luật
Số hạng thứ k: giá trị trước * 10 + n.
- term1 = n
- term2 = term1 * 10 + n = nn
- term3 = term2 * 10 + n = nnn
- ...
Mã nguồn
n, m = 3, 4
term = n
total = 0
for _ in range(m):
total += term
term = term * 10 + n
print(total) # 3702Ví dụ 2: n=5, m=5
n, m = 5, 5
term = n
total = 0
for _ in range(m):
total += term
term = term * 10 + n
print(total) # 61725Cách khác: Công thức toán học
Số hạng k = n * (10^k - 1) / 9. Tổng = Σ n*(10^k-1)/9 = n/9 * (Σ10^k - m).
def series_sum_formula(n, m):
# Σ_{k=1..m} n * (10^k - 1) / 9
return n * (10**(m+1) - 9*m - 10) // 81
print(series_sum_formula(3, 4)) # 3702
print(series_sum_formula(5, 5)) # 61725Kết luận
Cách lặp đơn giản, dễ hiểu, O(m). Công thức toán học O(1) nhưng dễ sai do số lớn, chia nguyên. Dùng cách lặp cho an toàn, trừ khi m rất lớn cần tối ưu.