回文素数

回文素数
所谓回文素数是指对一个素数n,从左到右和从右到左读是相同的,这样的数就称为回文素数,例如11,101,313等。编程计算并输出不超过n(100<=n<1000)的回文素数,并统计这些回文素数的个数,其中n的值从键盘输入。

程序运行示例1
Input n:
100↙
  11
count=1

程序运行示例2
Input n:
1000↙
  11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929
count=16

输入格式:"%d"
输出格式:
输入提示信息:"Input n:\n"
输出格式:"%4d"
        
  "\ncount=%d\n"
 

#include<stdio.h>
#include<math.h>
int IsPrime(int x);
int main()
{                   
    int i, j, k, t, m, n, count = 0;
    printf("Input n:\n");
    scanf("%d", &n);
    for (m = 10; m < n; m++)  // 从10开始试到n-1
    {                   
        i = m / 100;                  // 分离出百位数字
        j = (m - i * 100) / 10;  // 分离出十位数字
        k = m % 10;                // 分离出个位数字
        if (m < 100)               // 若为两位数
        {                   
            t = k * 10 + j ;       //右读结果
        }
        else                         // 若为三位数
        {                   
            t = k * 100 + j * 10 + i; //右读结果
        }
        if (m == t && IsPrime(m))
        {                   
            printf("%4d", m);
            count++;
        }
    }
    printf("\ncount=%d\n", count);
    return 0;
}                   
// 函数功能:判断x是否是素数,若函数返回0,则表示不是素数,若返回1,则代表是素数
int IsPrime(int x)
{                   
    int i, flag = 1;
    int squareRoot = (int)sqrt(x);
    if (x <= 1)   flag = 0;     // 负数、0和1都不是素数
    for (i = 2; i <= squareRoot && flag; i++)
    {                   
        if (x % i == 0) flag = 0; // 若能被整除,则不是素数
    }
    return flag;
}





#include<stdio.h>
#include<math.h>
#include<string.h>
void main()
{
    int chuli(long);
    long m,k,d,n,count;
    long i;
     n=10;
 printf("Input n:\n");
    scanf("%d",&m);
    for(i=n;i<=m;i++){
        k=sqrt(i);
        for(d=2;d<=k;d++){
            if(i%d==0)
                break;
        }
        if(d>k){
            if(chuli(i)==1)
                printf("%4d",i);
                count++;
        }
    }

    printf("\ncount=%d\n",count);
}
int chuli(long z)
{
    long i=0,j;
    int arr[100];
    while(z){
        arr[i]=z%10;
        z=z/10;
        i++;
    }
    for(j=0;j<i/2;j++)
    {
        if(arr[j]!=arr[i-j-1])
            return 0;
    }
    return 1;
}

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值