懒得动脑,直接按提示说的做,结果88 pts,最后一个测试点RE。
#include<bits/stdc++.h>
using namespace std;
bitset<100000100LL> vis;
long long a,b;
int ws(long long d){
long long k=10;
for(int i=1;;++i){
if(d<k){
return i;
}
else{
k*=10;
}
}
}
void iss(long long d){
if(!vis[d] && d>=a && d<=b){
cout<<d<<endl;
}
}
void fhw(int d){
int d1,d2,d3,d4,d5;
switch(d){
case 1:
for(int i=1;i<10;i+=2){
iss(i);
}
break;
case 2:
for(int i=1;i<10;i+=2){
iss(i*11);
}
break;
case 3:
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
iss(d1*101+d2*10);
}
}
break;
case 4:
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
iss(d1*1001+d2*110);
}
}
break;
case 5:
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
iss(10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1);
}
}
}
break;
case 6:
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
iss(d1*100001+d2*10010+d3*1100);
}
}
}
break;
case 7:
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
for(d4=0;d4<10;++d4){
iss(d1*1000001+d2*100010+d3*10100+d4*1000);
}
}
}
}
break;
case 8:
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
for(d4=0;d4<10;++d4){
iss(d1*10000001LL+d2*1000010LL+d3*100100+d4*11000);
}
}
}
}
break;
case 9:
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
for(d4=0;d4<10;++d4){
for(d5=0;d5<10;++d5){
iss(d1*100000001LL+d2*10000010LL+d3*1000100LL+d4*101000+d5*10000);
}
}
}
}
}
break;
}
}
int main(){
cin>>a>>b;
vis[0]=vis[1]=1;
for(int i=2;i*i<=b;++i){
if(!vis[i]){
for(int j=2;j*i<=b;++j){
vis[i*j]=1;
}
}
}
for(int i=ws(a);i<=ws(b);++i){
fhw(i);
}
return 0;
}