测试链接
总时间限制: 1000ms 内存限制: 65536kB
描述
找出正整数 M 和 N 之间(N 不小于 M)的所有真素数。
真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为真素数。
例如,11,13 均为真素数,因为11的反序还是为11,13 的反序为 31 也为素数。
输入
输入两个数 M 和 N,空格间隔,1 <= M <= N <= 100000。
输出
按从小到大输出 M 和 N 之间(包括 M 和 N )的真素数,逗号间隔。如果之间没有真素数,则输出 No。
样例输入
10 35
样例输出
11,13,17,31
#include<iostream>
#include<cmath>
using namespace std;
int bit(int);
int judge(int);
int main()
{
int r,i,m,n,j,num=0,digit,value,tol=0;
cin>>m>>n;
int a[1000]={0};
bool prime=false;
for (i=m;i<=n;i++)
{
if (judge(i))
{
r=i;
tol=0;
for (int j=0;j<bit(i);j++)
{
digit=r%10;
value=digit*pow(10,bit(i)-1-j);
tol+=value;
r/=10;
}
if (judge(tol))
{
a[num++]=i;
prime=true;
}
else
continue;
}
else
continue;
}
if (prime==false)
cout<<"No";
for (i=0;i<num;i++)
{
if (i!=num-1)
cout<<a[i]<<",";
else
cout<<a[i];
}
return 0;
}
int judge(int x)
{
if (x==1)
return 0;
for (int j=2;j<=sqrt(x);j++)
if (x%j==0)
return 0;
return x;
}
int bit(int y)
{
int sum=0;
do
{
sum++;
y/=10;
}while(y!=0);
return sum;
}