Cho số nguyên n. Tính tổng S = 1¹ + 2² + 3³ + ... + nⁿ.
Lưu ý quan trọng
Bài gốc nhầm lẫn: viết i*i (bình phương) thay vì i^i (lũy thừa). Tổng bình phương là n(n+1)(2n+1)/6. Tổng lũy thừa i^i không có công thức đóng dạng đơn giản, phải tính từng số hạng.
Ví dụ (tổng lũy thừa)
n = 4: 1¹ + 2² + 3³ + 4⁴ = 1 + 4 + 27 + 256 = 288
Đệ quy tính i^i
long long power(int base, int exp) {
if (exp == 0) return 1;
return base * power(base, exp - 1);
}
long long sumRecursive(int n) {
if (n == 0) return 0;
return power(n, n) + sumRecursive(n - 1);
}
Chương trình C++ đầy đủ
#include <iostream>
using namespace std;
long long power(int base, int exp) {
long long res = 1;
for (int i = 0; i < exp; i++) res *= base; // Lặp nhanh hơn đệ quy
return res;
}
long long calcSeriesSum(int n) {
long long sum = 0;
for (int i = 1; i <= n; i++) sum += power(i, i);
return sum;
}
int main() {
int n = 7;
cout << "Tong 1^1 + 2^2 + ... + " << n << "^" << n << " = " << calcSeriesSum(n);
return 0;
}
Kết quả
Tong 1^1 + 2^2 + ... + 7^7 = 873612
Lưu ý
Giá trị tăng rất nhanh. n=10 đã gần 10¹⁰. Cần long long (đến n≈14) hoặc big integer cho n lớn.