头歌:循环3第6关:回文质数

题目描述

因为 151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。

写一个程序来找出范围 [a,b](5≤a<b≤100,000)(一百万)间的所有回文质数。

输入格式

第一行输入两个正整数 ab

输出格式

输出一个回文质数的列表,一行一个。

样例

样例输入

5 500

样例输出

 
  1. 5
  2. 7
  3. 11
  4. 101
  5. 131
  6. 151
  7. 181
  8. 191
  9. 313
  10. 353
  11. 373
  12. 383

提示

提示 1: 找出所有的回文数再判断它们是不是质数(素数).

提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。

例如:产生长度为 5的回文数:

 
  1. for (d1 = 1; d1 <= 9; d1+=2) { // 只有奇数才会是素数
  2. for (d2 = 0; d2 <= 9; d2++) {
  3. for (d3 = 0; d3 <= 9; d3++) {
  4. palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;
  5. //(处理回文数...)
  6. }
  7. }
  8. }
    #include <stdio.h>
    int zs(int n){
    	int i,flag=0;
    	if(n<=2)//1.2是质数 
    		return 1;
    	else
    {
    		for(i=2;i<n;i++)
            {
    			if(n%i==0)
                {            //不是质数 
    				flag=-1;
    				return -1;
    				break;
    			}
    		} 
    		return 1;//是质数 
    	}
    }
    int main(){
    	int i,t,a,b,num1,num2=0,last=0;
    	scanf("%d%d",&a,&b);
    	//printf("%d\n",zs(6));
    	if(a>b){//确保a<b 
    		t=a;
    		a=b;
    		b=t;
    	}
    	for(i=a;i<=b;i++){
    		num1=i;
    		while(num1!=0){
    			last=num1%10;
    			num2=num2*10+last;
    			num1=num1/10;
    		}
    		if(i==num2&&(zs(i)==1))
            {//回文质数 
    			printf("%d\n",i);
    		}
    		num2=0;
    	}
    	return 0;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值