yinbe @ 2023-01-06 10:54:03
#include<iostream>
using namespace std;
bool isPrime(int n)
{
if(n<2)
{
return false;
}
if(n==2)
{
return true;
}
for(int i=2;i*i<n;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
bool huiwen(int n)
{
int m=0;
while(n)
{
m=m+n%10;
n/=10;
m*=10;
}
m/=10;
if(m==n)
{
return true;
}
else
{
return false;
}
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
for(int i=a;i<=b;i++)
{
if(isPrime(i)&&huiwen(i))
{
printf("%d\n",i);
}
}
return 0;
}
by jhdrgfj @ 2023-01-06 11:00:16
你的回文判断好像是错的
by Loser_Syx @ 2023-01-06 11:01:36
@LuYe0219 你回文判断那边,n已经为0了,再去和m比较,不就是不可能为真了吗,所以可以把n的值储存到另一个变量里,当翻转完一遍,判断m和那个变量是否相等就行了
by Loser_Syx @ 2023-01-06 11:02:16
@LuYe0219 而且质数判断也有点问题,那个for应该是i * i <= n
by WA_sir @ 2023-01-06 11:02:24
@LuYe0219
for(int i=2;i*i<n;i++)
改为i*i<=n
"huiwen"函数重写,最后判断时
by yinbe @ 2023-01-07 21:58:10
现在可以了,但TLE了三个点测试记录
#include<iostream>
using namespace std;
bool isPrime(int n)
{
if(n<2)
{
return false;
}
if(n==2)
{
return true;
}
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
bool huiwen(int n)
{
int m=0,a=n;
while(a)
{
m=m+a%10;
a/=10;
m*=10;
}
m/=10;
if(m==n)
{
return true;
}
else
{
return false;
}
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
for(int i=a;i<=b;i++)
{
if(isPrime(i)&&huiwen(i))
{
printf("%d\n",i);
}
}
return 0;
}
by Lucas2024 @ 2023-01-25 15:42:23
你试试把回文判断改成构造回文数
by Lucas2024 @ 2023-01-25 15:46:58
@Saint_ying_xtf 或者
i<=sqrt(n)
by Loser_Syx @ 2023-01-26 08:06:08
@Lucas2023 @我干嘛,我又没问问题