问既是回文数又是质数,且在10000-99999之间的整数有多 少个,并按从小到大的顺序输出其中最小的10个.

问既是回文数又是质数,且在10000-99999之间的整数有多
少个,并按从小到大的顺序输出其中最小的10个.

供参考:

#include <stdio.h>
int isPrime(int n)
{
    int i;
    if (n <= 3) return n > 1;
    for (i = 2;i * i <= n; i++)
        if (n % i == 0) return 0;
    return 1;
}

int isPalindrome(int n)
{
    int tmp = 0,k = n;
    while (k){
          tmp = tmp * 10 + k % 10;
          k /= 10;
    }
    return tmp == n;
}

int main()
{
    int i,cnt;
    for (i = 10000, cnt = 0; i <= 99999; i++)
        if (isPrime(i) && isPalindrome(i)){
            if (cnt++ < 10)
                printf("%6d",i);
        }
    printf("\n10000到99999之间既是回文数又是质数的数有%d个.\n",cnt);
    return 0;
}

一个实现,供参考:


#include  <stdio.h>
#include <math.h>
int main(void){
    
    int  prime=1,i,j;
    int num=0;
    int fivePosition,fourPosition,threePosition,twoPosition,onePosition;
    
    for(i=10000;i<=99999;i++){
        
        for(j=2;j<=sqrt(i);j++){ //判断当前的数是否为质数 
            if(i%j==0){
                prime=0;
            }
        }
        
        onePosition=i%10;  //提取个位 
        twoPosition = i/10%10;  //提取十位 
        //threePosition =i/100%10;  //提取百位 
        fourPosition = i/1000%10;  //提取千位 
        fivePosition = i/10000%10;  //提取万位 
        
        if(onePosition==fivePosition&&twoPosition==fourPosition  //如果既是回文数又是质数,则打印前10个 
            &&prime==1){
            if(num<10){ //打印前10printf("%d ",i);
            }            
            num++;        
        }
        
        
        prime=1;     //质数标志置为1,即默认当前数是质数    
        
    } 
    
    printf("\n10000到99999之间既是回文数又是质数的数有%d个。\n",num); 
    
    return 0;
}