美文网首页
五位自然数是否是回文质数的算法实现

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

作者: 路万奇与青川君 | 来源:发表于2018-04-02 12:47 被阅读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;
    }
    
    

    相关文章

      网友评论

          本文标题:五位自然数是否是回文质数的算法实现

          本文链接:https://www.haomeiwen.com/subject/bynthftx.html