Cho số n. Kiểm tra n có chia hết cho tổng giai thừa các chữ số của nó không.
Ví dụ: n=19. Tổng giai thừa chữ số = 1! + 9! = 1 + 362880 = 362881. 362881 % 19 = 0 → YES.
Giải thuật
- Tách chữ số của n
- Tính giai thừa mỗi chữ số (có thể precompute 0!..9!)
- Tổng các giai thừa
- Kiểm tra tổng % n == 0
Ví dụ minh họa
#include <iostream>
using namespace std;
int factorial(int n) {
if (n <= 1) return 1;
return factorial(n - 1) * n;
}
bool isDigitsFactDivByNumber(int num) {
int temp = num;
int sum = 0;
while (num) {
int digit = num % 10;
sum += factorial(digit);
num /= 10;
}
return (sum % temp == 0);
}
int main() {
int number = 19;
if (isDigitsFactDivByNumber(number))
cout << "Co, so chia het tong giai thua chu so.";
else
cout << "Khong, so KHONG chia het tong giai thua chu so.";
}
Kết quả
Co, so chia het tong giai thua chu so.