许诺 • 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;
}
评论:
请先登录,才能进行评论