回文素数

发布时间 2023-05-09 20:27:13作者: 祝我好運

1.问题描述

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

求出所有不超过1000的回文素数。

2.问题分析

判断素数就不说了,一会做个函数判断就行

求回文数,我用的是穷举法,判断一千以内所有整数,如果是回文数,再去判断是不是素数,如果都符合,就打印输出。

3.算法设计

因为是一千以内的数,我们先把这个数拆分,三重循环,遍历一千以内的整数,就是这样

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

还要进行一个判断,因为这个数可能有一个位置为0,下面这个就是前两位为0

if (i == 0 && j == 0)
                {
                    m = m / 100;
                }

这个是第一位为0

else if (i == 0)
                {
                    m = m / 100;
                }

4.程序

#include<iostream>
using namespace std;
int fun(int n)//这个就是判断n是不是为素数
{
    int i;
    for (i = 2; i < (n - 1) / 2; ++i)
    {
        if (n % i == 0)
            return 0;
    }
        return 1;//如果符合条件,就返回1
}
int main()
{
    int i, j, k, n, m;//这里的m是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 / 100;
                }
                if (n > 10 && n == m && fun(n))//判断n如果大于10,n和顺序相反的m相同,而且n也是个素数
                {
                    cout << n << endl;
                }
            }
    return 0;
}