五位自然数是否是回文质数的算法实现

2018-04-02  本文已影响0人  路万奇与青川君
#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;
}

上一篇下一篇

猜你喜欢

热点阅读