Prime Palindromes

题意:求[a, b]上所有的回文质数


解题思路

  1. 先生成回文数,再判断是否为质数
  2. 如生成3个数字的回文,则XXX的前两位可以遍历10~99,然后最后一位可相应取第一位即可;如生成4个数字的回文,则XXXX的前两位可以遍历10~99,然后最后两位对称取就好。按照这样的方法就能取到所有的回文数
  3. 对每个生成的回文数检测是否为质数,如果是的话输出

代码

/*
ID: zc.rene1
LANG: C
PROG: pprime
*/
#include<stdio.h>
#include<math.h>

int check_palindrome[9];

int is_prime(int num){
	int i;
	for(i=2; i<=sqrt(num); i++){
		if(num%i==0) return 0;
	}
	return 1;
}

int get_len(int num){
	int ret=0;
	while(num!=0){
		ret++;
		num/=10;
	}
	return ret;
}

int main(void){
	FILE *fin=fopen("pprime.in", "r");
	FILE *fout=fopen("pprime.out", "w");
	
	int a, b, len_a, len_b, len, i, j, copy_i, num, times;
	int start;
	fscanf(fin, "%d %d", &a, &b);
	
	len_a=get_len(a);
	len_b=get_len(b);
	
	
	for(len=len_a; len<=(len_b>8?8:len_b); len++){
		start=pow(10, (len-1)/2);
		for(i=start; i<10*start; i++){
			copy_i=i;
			j=(len-1)/2;
			/*put digits into array*/
			while(copy_i!=0){
				check_palindrome[j--]=copy_i%10;
				copy_i/=10;
			}
			/*copy digits to make it a palindrome*/
			for(j=len/2; j<len; j++){
				check_palindrome[j]=check_palindrome[len-j-1];
			}
			/*count the value of number in digits*/
			num=0;
			times=1;
			for(j=len-1; j>=0; j--){
				num+=check_palindrome[j]*times;
				times*=10;
			}
			if(num<a||num>b) continue;
			/*judge if it's a prime number*/
			if(is_prime(num)){
				fprintf(fout, "%d\n", num);
			}
		}
	}
	return 0;
}
	












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值