当前位置: 首页 > news >正文

特殊回文数的因子

给定一个范围[a, b],找出这个范围内所有满足以下条件的数:

  • 这个数是回文数
  • 这个数的所有质因子也都是回文数
  • 这个数至少有两个不同的质因子

输入格式:

两个整数 a 和 b (1 ≤ a < b ≤ 10000)

输出格式:

按升序输出所有满足条件的数,每个数占一行。

同时输出这个数的所有回文质因子(按升序,用空格分隔)。

如果没有找到满足条件的数,输出"None"。

示例输入:

100 200

示例输出:

121 11 11
141 3 47

解释:

  • 121 = 11 × 11,11是回文质数
  • 141 = 3 × 47,3和47都是回文质数

这道题目综合了:

  1. 回文数判断
  2. 质因数分解
  3. 判断质数是否为回文数
  4. 结果的格式化输出
  5. 多重条件判断

解答:

#include <stdio.h>
int huiwen(int n)
{
    int temp = n;
    int count = 0;
    while (temp > 0)
    {
        temp /= 10;
        count++;
    }
    
    temp = n;  // 重新赋值
    int a[count];
    for (int i = 0; i < count; i++)
    {
        a[i] = temp % 10;
        temp /= 10;
    }
    
    for (int i = 0; i < count; i++)
    {
        if (a[i] != a[count - i - 1])
        {
            return 0;
        }
    }
    return 1;
}
int findPrimeFactors(int n)
{
    // 处理所有的2
    int count = 0;  // 用于记录回文质因子的个数
    
    if (n % 2 == 0)
    {
        if (!huiwen(2)) return 0;  // 如果2是因子但不是回文数,直接返回0
        count = 1;
        while (n % 2 == 0)
        {
            n = n / 2;
        }
    }

    // 处理其他可能的质因数
    for (int i = 3; i * i <= n; i = i + 2)
    {
        if (n % i == 0)  // 如果i是因子
        {
            if (!huiwen(i)) return 0;  // 如果因子不是回文数,直接返回0
            count++;
            while (n % i == 0)
            {
                n = n / i;
            }
        }
    }

    // 如果n大于2,说明n本身就是质数
    if (n > 2)
    {
        if (!huiwen(n)) return 0;  // 如果最后的因子不是回文数,返回0
        count++;
    }
    
    return count >= 2;  // 至少要有两个不同的回文质因子
}
void printPrimeFactors(int n)
{
    printf("%d ", n);  // 先打印数字本身
    
    // 处理所有的2
    if (n % 2 == 0)
    {
        printf("2 ");
        while (n % 2 == 0)
        {
            n = n / 2;
        }
    }

    // 处理其他可能的质因数
    for (int i = 3; i * i <= n; i = i + 2)
    {
        if (n % i == 0)
        {
            printf("%d ", i);
            while (n % i == 0)
            {
                n = n / i;
            }
        }
    }

    // 如果n大于2,说明n本身就是质数
    if (n > 2)
    {
        printf("%d", n);
    }
    printf("\n");
}
int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    int found = 0;
    
    for (int i = a; i <= b; i++)
    {
        if (huiwen(i) && findPrimeFactors(i))
        {
            found = 1;
            printPrimeFactors(i);
        }
    }
    
    if (!found)
    {
        printf("None\n");
    }
    return 0;
}

http://www.dtcms.com/a/35819.html

相关文章:

  • 22、《Spring Boot消息队列:RabbitMQ延迟队列与死信队列深度解析》
  • SpringBoot约定大于配置
  • 【AIGC系列】1:自编码器(AutoEncoder, AE)
  • Win10登录Samba服务器报用户名密码错误问题解决
  • 测试工程师玩转DeepSeek之Prompt
  • ubuntu22.04的docker容器中安装ssh服务
  • 机器学习数学基础:32.斯皮尔曼等级相关
  • 机器学习数学基础:36.φ相关系数分析
  • iOS指纹归因详解
  • C++ Primer 额外的string操作
  • MySQL入门:高频操作命令大全
  • Java 实现快速排序算法:一条快速通道,分而治之
  • 超详细介绍map(multimap)的使用
  • JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用
  • 【原创】Windows11安装WSL“无法解析服务器的名称或地址”问题解决方法
  • rust 前端npm依赖工具rsup升级日志
  • 独立开发者之Google Analytics使用教程
  • 文字语音相互转换
  • 玩机日记 11 解决fnOS识别不了虚拟核显的问题
  • 01-03基于vs2022的c语言笔记——软件安装,写程序前的准备,初识c语言
  • pyecharts介绍
  • 从基础到模块化:深度解析RAG技术演进如何重塑AI知识边界
  • 系统升级过程中如何实现数据的平滑迁移
  • MySQL 主从同步延迟:原因剖析与解决之道
  • 图片爬取案例
  • Spring Boot 项目启动命令大全:参数详解与高阶用法
  • Android之APP更新(通过接口更新)
  • Unity 协程
  • SpringBoot五:Web开发
  • ubuntu20.04音频aplay调试