输入一个整数n,输出n的约数为质数的数?两个问题n的约数问题和n的质数问题

输入一个整数n,输出n的约数为质数的数?

  • 一.首先解决n的质数的问题
    • (1)枚举法
    • (2)埃氏筛
  • 二.解决n的质数约数问题

一.首先解决n的质数的问题

(1)枚举法

       考虑质数的定义:在大于 1的自然数中,除了 1 和它本身以外不再有其他因数的自然数。因此对于每个数 x,我们可以从小到大枚举 [2,x−1] 中的每个数 y,判断 y是否为 x的因数。但这样判断一个数是否为质数的时间复杂度最差情况下会到 O(n),无法通过所有测试数据。
       就不写代码了

       枚举没有考虑到数与数的关联性,因此难以再继续优化时间复杂度。接下来我们介绍一个常见的算法,该算法由希腊数学家厄拉多塞(Eratosthenes\rm EratosthenesEratosthenes)提出,称为厄拉多塞筛法,简称埃氏筛。

(2)埃氏筛

以下是埃氏筛法的步骤:

1.创建一个大小为 n+1 的布尔数组 is_prime,并将所有元素初始化为 True。数组的索引代表数字,True 表示该数字是质数,False 表示该数字是合数。
2.将 is_prime[0] 和 is_prime[1] 设置为 False,因为 0 和 1 不是质数。
3.从索引 2 开始,遍历数组。如果当前索引 i 是质数(即 is_prime[i] 为 True),则将所有 i 的倍数(从 i^2开始,小于等于 n)标记为 False,表示这些数不是质数。
4.遍历完成后,所有 is_prime 数组中值为 True 的索引即为小于等于 n 的质数。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 函数声明
void sieve_of_eratosthenes(int n);

int main() {
    int n = 30;
    printf("小于等于 %d 的质数:\n", n);
    sieve_of_eratosthenes(n);
    return 0;
}

// 实现埃拉托色尼筛法
void sieve_of_eratosthenes(int n) {
    // 动态分配一个布尔数组,并初始化为 true
    bool *is_prime = (bool*) malloc((n + 1) * sizeof(bool));
    for (int i = 0; i <= n; i++) {
        is_prime[i] = true;
    }

    is_prime[0] = is_prime[1] = false; // 0 和 1 不是质数

    for (int p = 2; p * p <= n; p++) {
        // 如果 is_prime[p] 没有被标记为 false,则 p 是一个质数
        if (is_prime[p] == true) {
            // 将所有 p 的倍数标记为 false
            for (int i = p * p; i <= n; i += p) {
                is_prime[i] = false;
            }
        }
    }

    // 打印所有的质数
    for (int p = 2; p <= n; p++) {
        if (is_prime[p]) {
            printf("%d ", p);
        }
    }
    printf("\n");

    // 释放动态分配的内存
    free(is_prime);
}

二.解决n的质数约数问题

要找出一个整数 n 的所有质数约数,我们可以通过以下步骤实现:

1.使用埃拉托色尼筛法生成小于等于 n 的所有质数。
2.遍历这些质数,检查它们是否是 n 的约数。
3.输出所有质数约数。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// 函数声明
void sieve_of_eratosthenes(int n, bool* is_prime);
void print_prime_factors(int n, bool* is_prime);

int main() {
    int n;
    printf("请输入一个整数: ");
    scanf("%d", &n);

    // 动态分配一个布尔数组,用于存储质数信息
    bool *is_prime = (bool*) malloc((n + 1) * sizeof(bool));
    sieve_of_eratosthenes(n, is_prime);
    
    printf("%d 的质数约数是: ", n);
    print_prime_factors(n, is_prime);
    
    // 释放动态分配的内存
    free(is_prime);
    
    return 0;
}

// 实现埃拉托色尼筛法
void sieve_of_eratosthenes(int n, bool* is_prime) {
    for (int i = 0; i <= n; i++) {
        is_prime[i] = true;
    }

    is_prime[0] = is_prime[1] = false; // 0 和 1 不是质数

    for (int p = 2; p * p <= n; p++) {
        if (is_prime[p] == true) {
            for (int i = p * p; i <= n; i += p) {
                is_prime[i] = false;
            }
        }
    }
}

// 打印 n 的质数约数
void print_prime_factors(int n, bool* is_prime) {
    for (int i = 2; i <= n; i++) {
        if (is_prime[i] && n % i == 0) {
            printf("%d ", i);
        }
    }
    printf("\n");
}

代码解析:
1.使用 sieve_of_eratosthenes 函数生成小于等于 n 的所有质数,并将结果存储在布尔数组 is_prime 中。
2.使用 print_prime_factors 函数遍历所有小于等于 n 的数,如果该数是质数且是 n 的约数,则将其打印出来。
3.在 main 函数中,输入一个整数 n,并调用上述两个函数来生成质数并打印质数约数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/771645.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC 的工作流程和详细解释

Spring MVC&#xff08;Model-View-Controller&#xff09;框架是基于经典的 MVC 设计模式构建的&#xff0c;用于开发 Web 应用程序。下面是 Spring Boot MVC 的工作流程和详细解释&#xff1a; 1.客户端发起请求 1.客户端&#xff08;通常是浏览器&#xff09;发起 HTTP 请求…

VUE Pinia状态持久化

效果 实现方法 插件&#xff1a;pinia-plugin-persistedstate 链接地址 具体操作 安装 npm i pinia-plugin-persistedstate 添加到 pinia 实例上 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia cre…

自动化设备上位机设计 一

目录 一 设计原型 二 后台代码 一 设计原型 二 后台代码 namespace 自动化上位机设计 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}} }namespace 自动化上位机设计 {partial class Fo…

PDM与ERP物料编码技术在产品设计中的区别与应用

01 概 述 产品是企业赖以生存的基础&#xff0c;产品数据是企业最基本的也是最重要的数据&#xff0c;产品数据存在于产品设计、采购、生产、销售、服务、库存管理等全过程中。通过对产品设计数据进行编码&#xff0c;并增加采购、库存、生产、制造等属性信息&#xff0c;可以…

2.5 C#视觉程序开发实例1----设计一个IO_Manager

2.5 C#视觉程序开发实例1----设计一个IO_Manager 第一步目标&#xff1a; 1 实现获取IO触发信号Trig0 2 能够实现程序切换 3 图像处理后能够输出一个脉冲 1 IO 引脚定义 1.1 输入信号定义 1.2 输出信号定义 2 IO时序图 2.1 触发时序 2.2 切换程序时序图 3 IO_Manager.cs …

Android系统集成和使用FFmpeg

文章目录 前言FFmpeg源码下载交叉编译NDK下载x264编译源码下载编译 FFmpeg编译脚本 AOSP继承FFmpeg 前言 原生AOSP中并未继承FFmpeg&#xff0c;所以要想在android上使用&#xff0c;需要自己编译集成。 FFmpeg源码下载 git clone https://git.ffmpeg.org/ffmpeg.git目前最新…

云桌面运维工程师

一 深信服驻场工程师 1 深信服AC、AF、AD、NGAF、WOC Atrust、WAF项目实施经验者优先考虑。 负责云桌面POC测试 部署和配置&#xff1a;设置云桌面基础设施&#xff0c;包括虚拟化平台、云桌面管理软件和相关组件。确保正确配置网络、存储和安全设置。 用户体验&#xff1…

oracle用户过期/设置无限期用户/ORA-28001:the password has expired

oracle默认情况下&#xff0c;新建的账户只有180天的有效期&#xff0c;在有效期到期前一周就会报警。而一旦过了有效期&#xff0c;账户就会被锁定无法登录。所以为了方便起见&#xff0c;要修改oracle用户的有效期为无限。 1.查看用户密码的有效期设置&#xff0c;一般默认的…

如何解决滑块验证码 | 最佳滑块拼图验证码解决方案

你是否曾经在遇到滑块验证码时感觉像一个拼图大师&#xff1f;那种需要将拼图块完美地匹配到槽位中以证明你是人类的验证码&#xff1f;我也曾多次遇到过这些棘手的测试&#xff0c;虽然有点挑战性&#xff0c;但它们也是网络安全世界的一个迷人一瞥。在本指南中&#xff0c;我…

能保存到相册的风景视频在哪下载?下载风景视频网站分享

在当今以视觉为核心的时代&#xff0c;高清美丽的风景视频不仅能够丰富我们的日常生活&#xff0c;还能提供心灵上的慰藉。无论是为了制作视频项目&#xff0c;还是仅仅想要珍藏一些精美的风景画面&#xff0c;获取高质量的风景视频素材显得尤为重要。许多人可能会问&#xff1…

班迪录屏(Bandicam)7.0下载以及安装教程

最近有小伙伴私信我&#xff0c;问我有没有好用的录屏工具&#xff0c;今天给大家分享一个我一直在使用的录屏工具&#xff0c;也是解锁了V1P版本&#xff0c;绿色版打开就可以使用~ Bandicam录屏&#xff08;PC&#xff09; Bandicam录屏是一款专为捕捉屏幕精彩瞬间而设计的…

使用 iconfont.ttf文件保存多个图标文件,并且像文字一样使用代码绘制出来

先看演示效果 这里的多个图标其实是存储在 iconfont.ttf文件中 这个文件里面的图标对应的编码 显示代码 void CMFCApplication3Dlg::OnBnClickedOk() {// 加载字体文件CString fontPath = _T("C:\\Users\\35497\\Desktop\\test\\MFCApplication3\\font\\iconfont.ttf&qu…

测试引擎模拟接口实战

在上一章的内容中&#xff0c;我简单介绍了整个微服务的各个子模块&#xff0c;还封装了一些工具类。 当然&#xff0c;若还没完成上次内容的也可以点击右侧的传送门------传送门 EngineApplication 在开发测试引擎模拟接口之前&#xff0c;还需要给xxx-engine创建一个Sprin…

langchain框架轻松实现本地RAG

一 什么是RAG? RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合了检索和生成模型的方法&#xff0c;主要用于解决序列到序列的任务&#xff0c;如问答、对话系统、文本摘要等。它的核心思想是通过从大量文档中检索相关信息&#xff0c;然后利用这些信息…

【Android面试八股文】你是怎么保证Android设备的时间与服务器时间同步的?(使用NTP和TrueTime方案)

文章目录 一、网络时间协议(NTP)二、使用网络时间协议(NTP)2.1 使用系统提供的 NTP 服务器2.2 使用TrueTime2.2.1 引入TrueTime库2.2.2 初始化 TrueTime2.2.3 用法2.2.4 使用 TrueTime 获取时间2.2.4 自动更新时间2.2.5 注意事项二. 使用 HTTP 请求获取服务器时间2.1. 发送…

鸿蒙开发设备管理:【@ohos.thermal (热管理)】

热管理 该模块提供热管理相关的接口&#xff0c;包括热档位查询及注册回调等功能。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shi…

c语言----队列

很久没有写文章了。因为放假了嘛&#xff0c;给自己稍微放松了一下&#xff0c;所以最近的更新很慢。呜呜下一次一定改。然后咧。今天我想与大家分享的是队列。虽然这个知识点我们应该在讲了堆的实现就应该写的&#xff0c;但是后面忘了&#xff0c;以为自己是写了的。但是昨天…

LLM - 词表示和语言模型

一. 词的相似度表示 (1): 用一系列与该词相关的词来表示 (2): 把每个词表示一个独立的符号(one hot) (3): 利用该词上下文的词来表示该词 (3): 建立一个低维度的向量空间&#xff0c;用深度学习方法将该词映射到这个空间里(Word Embedding) 二&#xff1a;语言模型 (1): 根…

基于 STM32 的智能睡眠呼吸监测系统设计

本设计的硬件构成&#xff1a; STM32F103C8T6单片机最小系统板&#xff08;包含3.3V稳压电路时钟晶振电路复位电路&#xff08;上电自复位&#xff0c;手动复位&#xff09;&#xff09;&#xff0c;心率传感器、气压传感器、液晶显示、按键、蜂鸣器、LED灯、蓝牙模块组合而成…