区间内的真素数

区间内的真素数


时间限制: 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;
}

 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值