区间内的真素数
总时间限制:
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
思路:常规思路。素数筛选+数字倒序。(不用素数筛法可能会TE)
#include<stdio.h>
bool prime[100001];
void init(){
for(int i=2;i<100001;i++) prime[i]=false;
for(int i=2;i<100001;i++){
if(prime[i]==false){
for(int j=i+i;j<100001;j=j+i) prime[j]=true;
}
}
}
int reverseNum(int n){
int reverse=0;
int num=n;
while(num){
reverse=reverse*10+num%10;
num/=10;
}
return reverse;
}
int main(void)
{
init();
int start,end;
bool f = false;
scanf("%d%d",&start,&end);
for(int i=start;i<=end;i++){
if(prime[i]==false&&prime[reverseNum(i)]==false){
if(!f){
printf("%d",i);
f=true;
}
else printf(",%d",i);
}
}
printf("\n");
if(!f) printf("No\n");
return 0;
}