Cho số nguyên n. Tính tổng S = 2⁰ + 2¹ + 2² + ... + 2ⁿ.
Ví dụ
n = 6 → S = 1 + 2 + 4 + 8 + 16 + 32 + 64 = 127
Cách 1: Vòng lặp O(n)
long long sum = 0;
for (int i = 0; i <= n; i++) sum += (1LL << i); // Dùng bit shift nhanh hơn pow()
Cách 2: Công thức hình học O(1)
Tổng cấp số nhân: S = 2^(n+1) - 1.
long long sum = (1LL << (n + 1)) - 1;
Lưu ý: Với n ≥ 63, cần dùng __int128 hoặc thư viện big integer.
Chương trình C++
#include <iostream>
using namespace std;
long long calcSeriesSum(int n) {
if (n >= 62) return -1; // Tràn long long
return (1LL << (n + 1)) - 1;
}
int main() {
int n = 11;
cout << "Tong chuoi 2^0 + ... + 2^" << n << " = " << calcSeriesSum(n);
return 0;
}
Kết quả
Tong chuoi 2^0 + ... + 2^11 = 4095