#include <iostream>
#include <math.h>
using namespace std;
int isprime(intnumber);
int isbacknum(intnumber);
int main(){
int number,ret_count=0;
int ret_array[100]; //由于我们在计算之前并不知道有多少个五位回文素数
//所以设置一个较大的数组比较稳妥
for(number=10000;number<100000;number++){
if(isbacknum(number)&&isprime(number)){
ret_array[ret_count]=number;
ret_count++;
}
}
cout<<"一共有"<<ret_count<<"个既是质数又是回文数的5位十进制数\n";
return 0;
}
int isbacknum(intnumber){
int ret,count,index_array[5];
for(count=0;number!=0;count++,number/=10){
index_array[count]=number%10;
//把每一位的数字都保存在index_array数组中
//如果输入的number是1234则index_array是{4,3,2,1}
}
int i,j; // i,j是遍历时用来标号的记号变量
for(i=0,j=4;i<=j;i++,j--){
if(i==j){
ret = 1; // 如果循环可以进行到这里,说明对应位置都是相等的
// 且此时i等于j 那么就是读到了最中间的一位
// 五位回文质数和最中间一位没有关系。
}
if(index_array[i]==index_array[j]){
continue; // 对应位置相等,那么就继续比对
}else{
ret = 0; // 否则不相等,那么返回 0 即 False
break; // 并跳出循环
}
}
return ret;
}
int isprime(intnumber){
int i,ret=1;
for(i=2;i<=sqrt(number);i++){
//由算法知,计算素数是靠从2始除以数。
//但是并不需要除以到number-1,只需要除以自己的开方数即可。
if(number%i==0){
//不是素数;
ret=0;
break;
}
}
return ret;
}
网友评论