luolie0804 @ 2023-05-18 19:00:15
#include<bits/stdc++.h>
using namespace std;
int hw(int n)
{
int s=0,g;
while(n>0)
{
g=n%10;s=s*10+g;n=n/10;
}
return s;
}
int isprime(int n)
{
if(n<2) return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
int main()
{
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
if(hw(i)==i&&isprime(i))
{
cout<<i<<endl;
}
}
return 0;
}
by luolie0804 @ 2023-05-18 19:47:56
我刚学C++一年
by _Adolf_Hitler_ @ 2023-05-18 19:58:56
6
by xiaoyang111 @ 2023-05-18 21:05:19
……什么时候唠嗑了?
by xiaoyang111 @ 2023-05-18 21:13:29
实在不行看题解吧
#include <bits/stdc++.h>//万能头
using namespace std;
bool func1(int a){//回文判断
int a1=a;
int a2=0;
while (a){
a2=a2*10+(a%10);
a/=10;
}
return a1==a2;
}
bool func2(int a){//素数判断
for (int i=2;i*i<=a/*个人猜测sqrt时间复杂度高一些*/;++i){
if (a%i==0){
return false;
}
}
return true;
}
int main(){
vector<int> v;
int a,b;
cin >> a >> b;
if (a%2==0){
++a;
}
for (int i=a;i<=b;i+=2){
if ((i>929 && i<10301) ||
(i>98689 && i<1003001) ||
(i>1998991 && i<3001003) ||
(i>3998993 && i<7014107) ||
(i>7996997 && i<9002009)){//根据真实答案推测出这些大范围没有回文质数
continue;
}
if (i==9989899){//最后一个回文质数,质数判断可能会TLE
cout<<i<<endl;
}else if (func1(i) && func2(i)){//如果都符合条件
cout<<i<<endl;
}
}
return 0;
}
我的AC代码,看看注释吧
by xiaoyang111 @ 2023-05-18 21:16:38
不得不说,这道题处理TLE是真的烦 记录
by xiaoyang111 @ 2023-05-18 21:17:22
@luolie0804 刚才那个代码不开O2 C++11可以过
by xiaoyang111 @ 2023-05-18 21:20:13
@luolie0804 五年级,刚开始注册洛谷时学的c++,Python感觉太简单了上了一个月就没上了
从我主页看嘛
by xiaoyang111 @ 2023-05-19 17:10:56
代码需开O2过
by chenzher @ 2023-05-30 20:56:50
@luolie0804 主函数里的可以改成这样:
int a,b;
cin>>a>>b;
if(a%2==0) a++;
for(int i=a;i<=b;i+=2)
{
if(hw(i)==i&&isprime(i))
{
cout<<i<<endl;
}
}
return 0;
by luolie0804 @ 2023-05-30 21:02:39
@xuzichen2023 谢谢大佬!!!