可逆素数(难度:半颗星)

来源:互联网 发布:网络教育怎么样 编辑:程序博客网 时间:2024/05/22 20:35

问题描述:

可逆素数是指该数本身是一个素数,并且把该数倒过来也是一个素数。

例如:1091是一个素数,把它倒过来1901也是一个素数,所以我们就说1091是一个可逆素数(同理1901也是一个可逆素数)

输出所有范围在【1000,9999】并且各位数之和是11的整数倍的可逆素数。

参考代码:

#include <stdio.h>int IsPrime(int n){//判断n是否为质数,如果是返回1,否则返回0    if (n < 2)        return 0;    int i;    for (i = 2; i * i <= n; i++)//这个地方的遍历范围是【2,sqrt(n)】,这里不想用开根号,所以改成了i * i <= n    {        if (n % i == 0)            return 0;    }    return 1;}int main(){    int i, temp, num = 0, sum = 0;    for (i = 1000; i <= 9999; i++)    {        temp = i;        sum = num = 0;        while (temp)        {            sum += temp % 10;            num = 10 * num + temp % 10;            temp /= 10;        }        if (IsPrime(i) && IsPrime(num) && sum % 11 == 0)            printf("%d\n", i);    }    return 0;}

运行结果:

这里写图片描述