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

#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;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容