Số Dudeney (theo Henry Dudeney) là số tự nhiên n sao cho n là lập phương của một số tự nhiên k (n = k³), **VÀ** tổng các chữ số của n bằng k.
Công thức: n = k³ và SumDigits(n) = k.
Ví dụ
- 1 = 1³, SumDigits(1)=1 -> **Là Dudeney**.
- 512 = 8³, SumDigits(512)=5+1+2=8 -> **Là Dudeney**.
- 4913 = 17³, SumDigits(4913)=4+9+1+3=17 -> **Là Dudeney**.
- 17592: Căn bậc 3 ≈ 26.0 (không nguyên) -> **Không phải**.
Phương pháp giải
- Tính căn bậc 3 của
n(làm tròn đến số nguyên gần nhấtk). - Kiểm tra
k*k*k == n(đảm bảo là lập phương hoàn hảo). - Tính tổng chữ số của
n. - So sánh tổng chữ số với
k.
Chương trình minh họa
#include <bits/stdc++.h>
using namespace std;
int sumOfDigits(int n) {
int sum = 0;
while (n > 0) { sum += n % 10; n /= 10; }
return sum;
}
bool isDudeney(int n) {
if (n <= 0) return false;
// Tính căn bậc 3 chính xác bằng cách duyệt hoặc cbrt + check
int k = round(cbrt(n)); // cbrt từ
// Kiểm tra lập phương hoàn hảo (tránh lỗi float)
if (1LL * k * k * k != n) return false;
return sumOfDigits(n) == k;
}
int main() {
cout << "Cac so Dudeney nho hon 100000:\n";
for (int i = 1; i < 100000; i++) {
if (isDudeney(i)) cout << i << " ";
}
cout << endl;
// Test case
int test = 17592;
cout << test << (isDudeney(test) ? " la " : " khong phai ") << "so Dudeney.";
return 0;
}
Đầu ra
Cac so Dudeney nho hon 100000: 1 512 4913 5832 17576 19683 17592 khong phai so Dudeney.
Lưu ý: Chỉ có 6 số Dudeney trong hệ thập phân: 1, 512, 4913, 5832, 17576, 19683.