Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Số Dudeney (Dudeney Numbers) trong C++

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

  1. Tính căn bậc 3 của n (làm tròn đến số nguyên gần nhất k).
  2. Kiểm tra k*k*k == n (đảm bảo là lập phương hoàn hảo).
  3. Tính tổng chữ số của n.
  4. 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.