Mrfs @ 2023-05-08 20:11:53
大佬们咋改呀,下面是完整代码...
#include<iostream>
#include<math.h>
using namespace std;
bool isHw(int x)
{
string strx = to_string(x);
int len = strx.length()-1;
for(int i=0;i<=len/2;i++)
{
if(strx[i] != strx[len-i]) return false;
}
// 优化 除了 11 以外 长度为偶数的回文数都不是质数
if(x != 11 && (len+1)%2 == 0) return false;
return true;
}
int main()
{
int x,y;
cin >> x >> y;
if(x%2 == 0) x ++;
for(int i=x;i<=y;i+=2)
{
if(isHw(i))
{
bool flag = true;
for(int j = 2;j<int(sqrt(i))+1;j++)
if(i%j == 0)
{
flag = false;
break;
}
if(flag) cout << i << endl;
}
}
return 0;
}
by xiaofeng_and_xiaoyu @ 2023-05-08 20:39:34
可以在适当部分进行跳过
if(i==1001){
i=10001;
}
if(i==100001){
i=1000001;
}
if(i==2000001){
i=3000003;
}
if(i==4000001){
i=7000007;
}
if(i==8000001){
i=9000009;
}
by xiaofeng_and_xiaoyu @ 2023-05-08 20:42:51
@Mrfs
by Mrfs @ 2023-05-09 11:15:18
@xiaofeng_and_xiaoyu 还是超时了,为啥,,我应该没加错位置吧,感觉跳过了许多数据了啊,为啥还超时...
#include<iostream>
#include<math.h>
using namespace std;
bool isHw(int x)
{
string strx = to_string(x);
int len = strx.length()-1;
for(int i=0;i<=len/2;i++)
{
if(strx[i] != strx[len-i]) return false;
}
// 优化 除了 11 以外 长度为偶数的回文数都不是质数
if(x != 11 && (len+1)%2 == 0) return false;
return true;
}
int main()
{
int x,y;
cin >> x >> y;
if(x%2 == 0) x ++;
for(int i=x;i<=y;i+=2)
{
if(i==1001){
i=10001;
}
if(i==100001){
i=1000001;
}
if(i==2000001){
i=3000003;
}
if(i==4000001){
i=7000007;
}
if(i==8000001){
i=9000009;
}
if(isHw(i))
{
bool flag = true;
for(int j = 2;j<int(sqrt(i))+1;j++)
if(i%j == 0)
{
flag = false;
break;
}
if(flag) cout << i << endl;
}
}
return 0;
}
by Mrfs @ 2023-05-09 17:41:49
@Mrfs 已经解决,在输入的x,y时候判断下
int x,y;
cin >> x >> y;
if(y > 9989899) y=9989899;