题解
2024-06-16 19:35:37
发布于:广东
21阅读
0回复
0点赞
因为
11/11=1
1001/11=91
100001/11=9091
10000001/11=909091
所以,,即偶数位的回文质数只有11.
又因为
所以不存在9位的回文质数.
说完了,开始暴力!
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> v;
void _init(){
v.push_back(11);//提前添加11
for(int i = 1; i <= 9; i += 2){
int tmp1 = i;
v.push_back(tmp1);
for(int j = 0; j <= 9; j++){
int tmp2 = i * 100 + j * 10 + i;
v.push_back(tmp2);
for(int k = 0; k <= 9; k++){
int tmp3 = i * 10000 + j * 1000 + k * 100 + j * 10 + i;
v.push_back(tmp3);
for(int l = 0; l <= 9; l++){
int tmp4 = i * 1000000 + j * 100000 + k * 10000 + l * 1000 + k * 100 + j * 10 + i;
v.push_back(tmp4);//添加回文数
}
}
}
}sort(v.begin(), v.end());//排序
}
bool check(int n){//判断
if(n == 2) return 1;
if(n < 2 || n % 2 == 0) return 0;
for(int i = 3; i * i <= n; i += 2){
if(n % i == 0) return 0;
}return 1;
}
int main(){
_init();
int n, m;
cin >> n >> m;
for(int i = 0; i < v.size() && v[i] <= m; i++){
if(v[i] < n) continue;
if(check(v[i])) cout << v[i] << endl;//如果是质数就输出
}
return 0;
}
时间复杂度:
这里空空如也
有帮助,赞一个