Cho số number và số lần lặp repeat. Tạo số mới bằng cách nối number lại repeat lần. Tính tổng đệ quy các chữ số (digital root) của số lớn này.
Ví dụ
Input: number=32, repeat=3 → 323232 → sum=15 → 1+5=6 Output: 6 Input: number=81, repeat=4 → 81818181 → sum=36 → 3+6=9 Output: 9
Quan sát quan trọng
Digital root của số lặp: dr(number lặp repeat lần) = dr(repeat * dr(number)). Vì tổng chữ số của số lặp = repeat * (tổng chữ số của number).
Mã nguồn C++
#include <bits/stdc++.h>
using namespace std;
int digitalRoot(int n) {
if (n == 0) return 0;
if (n % 9 == 0) return 9;
return n % 9;
}
int recursiveSumRepeated(int number, int repeat) {
int total = repeat * digitalRoot(number);
return digitalRoot(total);
}
int main() {
int number = 12, repeat = 4;
cout << "Tổng đệ quy số lặp: " << recursiveSumRepeated(number, repeat);
return 0;
}
Kết quả
Tổng đệ quy số lặp: 3
Giải thích
Tính digital root của number một lần. Nhân với repeat. Tính digital root của tích. Độ phức tạp O(1), không cần tạo số lớn hay chuyển chuỗi.
Kết luận
Bài viết giải quyết bài toán tổng đệ quy chữ số của số được lặp lại bằng công thức digital root. Mã C++ cực kỳ ngắn gọn, hiệu quả O(1). Có thể áp dụng cho C, Java, Python.