Tính tổng chuỗi mà số i xuất hiện đúng i lần: 1 + 2+2 + 3+3+3 + ... + n (n lần).
Ví dụ
n = 4: 1 + 2+2 + 3+3+3 + 4+4+4+4 = 30.
Phân tích
Chuỗi = 1^2 + 2^2 + 3^2 + ... + n^2.
3 cách giải
Cách 1: 2 vòng lặp lồng (O(n^2))
int calcSeriesSum(int n) {
int sum = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
sum += i;
return sum;
}
Cách 2: 1 vòng lặp (O(n))
int calcSeriesSum(int n) {
int sum = 0;
for (int i = 1; i <= n; i++)
sum += i * i;
return sum;
}
Cách 3: Công thức toán học (O(1))
Tổng bình phương: n(n+1)(2n+1)/6.
int calcSeriesSum(int n) {
return n * (n + 1) * (2 * n + 1) / 6;
}
Cài đặt đầy đủ
#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
return n * (n + 1) * (2 * n + 1) / 6;
}
int main() {
int n = 7;
cout << "Tong chuoi den " << n << " la " << calcSeriesSum(n);
return 0;
}
Output
Tong chuoi den 7 la 140
So sánh
| Cách | Độ phức tạp | Ưu/nhược điểm |
|---|---|---|
| 2 vòng lặp | O(n^2) | Chậm, chỉ để hiểu bài toán |
| 1 vòng lặp | O(n) | Đơn giản, đủ nhanh cho n ≤ 10^7 |
| Công thức | O(1) | Nhanh nhất, cần dùng long long tránh tràn |