【C语言】统计对称素数

对称素数 = 既是素数(只能被 1 和自身整除的大于 1 的整数),又是回文数(正读和反读都相同的数,如 131、151)。

实现思路

把问题拆分为两个核心子功能,再组合判断:

  1. 判断素数:排除小于 2 的数,遍历 2 到√n,判断是否能被整除;
  2. 判断回文数:将数字反转,比较反转后的数是否等于原数;
  3. 组合判断:只有同时满足 "素数" 和 "回文数",才是对称素数。
cpp 复制代码
#include <stdio.h>   
#include <math.h>    
#define _CRT_SECURE_NO_WARNINGS 1

// 判断是否为素数
bool isPrime(int n) {
     //小于2的数不是素数
    if (n < 2) {
        return false;
    }
    int i = 2;
    // 只需遍历到√n(减少循环次数)
    for (i=2; i * i <= n; i++) {
        // 能被整除,不是素数
        if (n % i == 0) {  
            return false;
        }
    }
    return true;
}

// 判断是否为回文数(对称数)
bool isPalindrome(int n) {
    // 负数不是回文数(对称素数只考虑正整数)
    if (n < 0) {
        return false;
    }
    int original = n;  // 保存原数
    int reversed = 0;  // 存储反转后的数

    // 反转数字
    while (n > 0) {
        // 取最低位拼到反转数中
        reversed = reversed * 10 + n % 10;  
        // 丢弃最低位
        n = n / 10;                         
    }

    // 反转后等于原数,就是回文数
    return reversed == original;
}

// 判断是否为对称素数
bool isSymmetricPrime(int n) {
    // 必须同时满足:是素数 + 是回文数
    return isPrime(n) && isPalindrome(n);
}

int main()
{
    // 输出 5 位以内的全部对称素数
    for (int i = 2; i < 9999; ++i) {
        int res = isSymmetricPrime(i);
        if(res)
            printf("%d\n",i);
    }
    
	return 0;
}
相关推荐
龙亘川23 分钟前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人28 分钟前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas1001 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
专注仿真2 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
jimy13 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
呆呆虫123 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
心疼你的一切3 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
Zwawa4 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
Wang's Blog4 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
中科三方5 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php