题目理解
这是很久之前写的代码了,所以直接复制粘贴了一波。不过还是可以说一下思路的。首先可以看一下这么多的循环嵌套,这是直接简单粗暴地构造了回文数。其次,对于质数的判断也仅仅加了一点点的优化,然而这个优化我发现也有毒。总之就是大力出奇迹。
对于回文数的构造,有如下的优化:当一个回文数的长度为偶数的时候,那么这个数是可以被11整除的,也就是说,长度为偶数的数只有11是质数。
代码
/**
ID: njuwz151
TASK: pprime
LANG: C++
*/
#include <bits/stdc++.h>
using namespace std;
bool is_prime(int a);
int main() {
int a, b;
cin >> a >> b;
for(int i = 5; i <= 11; i++) {
if(a<=i && i<=b && is_prime(i)) {
cout << i << endl;
} else if(b < i) {
break;
}
}
int num;
for(int i1 = 0; i1 <= 9; i1++) {
for(int i2 = 0; i2 <= 9; i2++) {
for(int i3 = 0; i3 <= 9; i3++) {
for(int i4 = 0; i4 <= 9; i4++) {
for(int i5 = 0; i5 <= 9; i5++) {
if(!i1 && !i2 && !i3) {
num = i4 * 101 + i5 * 10;
} else if(!i1 && !i2) {
num = i3 * 10001 + i4 * 1010 + i5 * 100;
} else if(!i1) {
num = i2 * 1000001 + i3 * 100010 + i4 * 10100 + i5 * 1000;
} else {
num = i1 * 100000001 + i2 * 10000010 + i3 * 1000100 + i4 * 101000 + i5 * 10000;
}
if(is_prime(num) && a <= num && num <= b) {
cout << num << endl;
} else if(b < num) {
return 0;
}
}
}
}
}
}
return 0;
}
bool is_prime(int a) {
int max = sqrt(a) + 1;
for(int i = 2; i <= sqrt(a); i++) {
if(a % i == 0) {
return false;
}
}
return true;
}