区间内的真素数
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
找出正整数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 <bitset>
using namespace std;
const unsigned int MAX=100000;
int xy(int i) {
int x[10]={0},r=i,l=1,z=1,n=0;
while(r) {
x[l]=r%10;
r=r/10;
l++;
}
l--;
for(int j=l;j>=1;j--) {
n=n+z*x[j];
z=z*10;
}
return n;
}
int main(){
bitset<MAX+10> bit;
int M,N,flag=0;
cin>>M>>N;
for(int i=2;i<=MAX/2+10;i++){
if(!bit.test(i))
for(int r=i+i;r<=MAX+10;r+=i){
bit.set(r);
}
else
continue;
}
for(int i=M;i<=N;i++){
if(!bit.test(i)&&!bit.test(xy(i)))
if(!flag++)
cout<<i;
else
cout<<','<<i;
}
if(!flag)
cout<<"No";
return 0;
}
#include<iostream>
using namespace std;
bool a[100005]={0};
int xy(int i)
{
int x[10]={0},r=i,l=1,z=1,n=0;
while(r)
{
x[l]=r%10;
r=r/10;
l++;
}
l--;
for(int j=l;j>=1;j--)
{
n=n+z*x[j];
z=z*10;
}
return n;
}
int main(){
int M,N,flag=0;
cin>>M>>N;
for(int i=2;i<=50005;i++){
if(a[i]==0)
for(int r=i+i;r<=100005;r+=i){
a[r]=1;
}
else continue;
}
for(int i=M;i<=N;i++){
if(a[i]==0&&a[xy(i)]==0)
if(!flag++)cout<<i;
else cout<<','<<i;
}
if(!flag) cout<<"No";
return 0;
}