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

Số Smart (Smart Number) thứ N C++

Số Smart: số có ít nhất 3 ước số nguyên tố phân biệt.

Dãy: 30 (2·3·5), 42 (2·3·7), 60 (2²·3·5), 66 (2·3·11), 70 (2·5·7), 78 (2·3·13)...

Thuật toán

  • Duyệt số từ 30 trở lên.
  • Đếm số ước nguyên tố phân biệt.
  • Khi đếm = N → trả về.

Triển khai C++

#include <bits/stdc++.h>
using namespace std;

bool isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i * i <= n; i++)
        if (n % i == 0) return false;
    return true;
}

bool isSmart(int n) {
    int cnt = 0;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0 && isPrime(i)) {
            cnt++;
            if (cnt >= 3) return true;
        }
    }
    return false;
}

int nthSmartNumber(int n) {
    int count = 0;
    for (int i = 30; ; i++)
        if (isSmart(i) && ++count == n) return i;
    return -1;
}

int main() {
    cout << nthSmartNumber(25) << endl; // 174
    return 0;
}

Kết quả

174

Tối ưu: Dùng sàng Eratosthenes tiền xử lý ước nguyên tố cho N lớn.