AC

许诺  •  18小时前


#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std; vector primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107};

bool is_prime(int n) {

if (n <= 1) return false;
for (int p : primes) {
    if (p * p > n) break;
    if (n % p == 0) return false;
}
return true;

}

int digit_sum(long long num) {

int sum = 0;
while (num > 0) {
    sum += num % 10;
    num /= 10;
}
return sum;

}

vector find_perfect_numbers(long long L, long long R) {

vector<long long> result;
long long start_k = sqrt(L);
if (start_k * start_k < L) {
    start_k++;
}
long long end_k = sqrt(R);

for (long long k = start_k; k <= end_k; ++k) {
    long long N = k * k;
    if (N < L || N > R) continue;
    int sum = digit_sum(N);
    if (is_prime(sum)) {
        result.push_back(N);
    }
}

if (result.empty()) {
    result.push_back(0);
}
return result;

}

int main() {

long long L, R;
cin >> L >> R;
vector<long long> perfect_numbers = find_perfect_numbers(L, R);
for (size_t i = 0; i < perfect_numbers.size(); ++i) {
    if (i != 0) cout << " ";
    cout << perfect_numbers[i];
}
cout << endl;
return 0;

}


评论:

请先登录,才能进行评论