设为首页 加入收藏

TOP

C语言求回文素数代码及解析
2018-12-02 22:09:13 】 浏览:130
Tags:语言 素数 代码 解析

所谓回文素数指的是,对一个整数n从左向右和从右向左读其数值都相同且n为素数,则称整数为回文素数。


对于偶数位的整数,除了11以外,都不存在回文素数。即所有的4位整数、6位整数、 8位整数…都不存在回文素数。下面列出两位和三位整数中包含的所有回文素数。


两位回文素数:11


三位回文素数:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929


本题要求解的问题是:求出所有不超过1000的回文素数。


本题要使用判断素数的方法,并且要解决如何求一个整数的回文数。


采用的方法是穷举法。对1000以内的每一个整数n进行考察,判断n是否为回文数。如果n是回文数,再判断它是否为素数,对于既是回文数也是素数的整数n,就是要求的回文素数,将其打印输出即可。


由于题目要求解的是所有不超过1000的回文素数,因此最后的结果中应该包含两位和三位的回文数。


采用穷举法来构造一个整数并求与其对应的反序数,若整数与其反序数相等,则该整数是回文数。


在问题分析中己经确定要采用穷举法逐一考察1000以内的每个整数,因此本题的算法设计可以釆用循环结构来完成。


通过三重循环来遍历所有1000以内的整数。用三个循环变量来构造整数n,同时,这三个循环变量反序便可以构造出n的反序数m。其中,特别要注意的是如果n的个位为0,接下来要做的就是比较m和n的值是否相等,如果相等,则表明整数n是回文数。再来判断n是否是素数,如果n同时也为素数,则n为回文素数,将其打印出来即可。


下面是完整的代码:


#include<stdio.h>


int fun(int n);


int main()
{
    int i, j, k, n, m;
    printf("不超过1000的回文数:\n");
    for(i=0; i<=9; ++i)  /*穷举第一位*/
        for(j=0; j<=9; ++j)  /*穷举第二位*/
            for(k=0; k<=9; ++k)  /*穷举第三位*/
            {
                n=i*100+j*10+k;  /*计算组成的整数*/
                m=k*100+j*10+i;  /*计算对应的反序数*/
                if(i==0 && j==0)  /*处理整数的前两位为0的情况*/
                {
                    m=m/100;
                }
                else if(i==0)  /*处理整数的第一位为0的情况*/
                {
                    m=m/10;
                }
                if(n>10 && n==m && fun(n))  /*若大于10且为回文素数,则输出*/
                {
                    printf("%d\t", n);
                }
            }
    printf("\n");
 
    return 0;
}


/*判断参数n是否为素数*/
int fun(int n)
{
    int i;
    for(i=2; i<(n-1)/2; ++i)
    {
        if(n%i == 0)
            return 0;
    }
    return 1;
}


运行结果:


不超过1000的回文数:
11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929 


C语言求回文素数代码及解析


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring Boot webSocket从入门到放.. 下一篇Java 11 初次体验有感

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目