【C、C++系列-1】C语言实现:寻找[1,100]之间的素数

2023-05-16

【C、C++系列-1】C语言实现:寻找[1,100]之间的素数

1. 问题

C语言实现:寻找[1,100]之间的素数

2. 实现代码

/*
 * 寻找[1,100]之间的素数
 */
#include <stdio.h>
#include <math.h>

/**
 * 判断一个数是否为素数
 *
 * 素数定义:
 * 质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
 *
 * @param number 被判断的数字
 * @return 是否为素数,1为是,0为否
 */
int isPrimeNumber(int number) {
    // 素数的定义域为大于1的自然数
    if (number <= 1) {
        return 0;
    } else {
        // 2是素数【特殊】
        if (number == 2) {
            return 1;
        }
        // 除了2之外,能被2整除的不是素数,在此排除【双数】
        if (number % 2 == 0) {
            return 0;
        }
        // 计算【该单数】的平方根,sqrt 位于 C 标准库 <math.h> 中
        // 作用:C 库函数 double sqrt(double x) 返回 x 的平方根。
        double numberSqrt = sqrt(number);
        // 接下来,只需判断:【该单数】能否被每一个【小于它的平方根的单数】整除。
        // 乘法具有对称性,因此,大于平方根的不必重复判断能否整除,以减少运算量
        for (int i = 3; i <= numberSqrt; i += 2) {
            if (number % i == 0) {
                // 如果可以整除,则不是素数
                return 0;
            }
        }
        // 如果可以整除,则是素数
        return 1;
    }
}

/**
 * 打印区间[low,high]内的素数
 * @param low 下区间
 * @param high 上区间
 */
void printPrimeNumber(int low, int high) {
    // 从下区间遍历到上区间
    for (int i = low; i <= high; i++) {
        // 判断每一个数是否为素数,如果该数是素数,则打印该数
        if (isPrimeNumber(i)) {
            printf("%d ", i);
        }
    }
    printf("\n");
}


/**
 * 【寻找区间内的的素数】主方法
 *
 * @return 程序的退出状态
 */
int main(void) {
    // 寻找素数范围的上、下区间
    int low, high;
    printf("请输入寻找素数范围的上、下区间,两个数字间用空格隔开,敲回车输入完毕:\n");
    scanf("%d %d", &low, &high);
    printf("%d 到 %d 之间所有的素数为:\n", low, high);
    // 打印区间内的素数
    printPrimeNumber(low, high);
    // 读取缓冲区的回车
    getchar();
    // 等待输入,防止程序执行后闪退
    getchar();
    return 0;
}

3. 执行结果

执行结果:

在这里插入图片描述

请输入寻找素数范围的上、下区间,两个数字间用空格隔开,敲回车输入完毕:
1 100
1 到 100 之间所有的素数为:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

4. 解决方法说明——穷举法

基本概念:穷举法(Exhaustive Attack method),它是一种最为直接,最容易实现,同时又最为耗时的一种解决问题的算法思想。

穷举法算法的基本思想是:在可能的解空间中穷举出每一种可能的解,并对每一个可能解进行判断,从中得到问题的答案。

穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。

若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。

用穷举法解题时,就是按照某种方式列举问题答案的过程。针对问题的数据类型而言,常用的列举方法一有如下三种:

  • (1)顺序列举 是指答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举。

  • (2)排列列举 有时答案的数据形式是一组数的排列,列举出所有答案所在范围内的排列,为排列列举。

  • (3)组合列举 当答案的数据形式为一些元素的组合时,往往需要用组合列举。组合是无序的。

暴力搜索或穷举搜索,在计算机科学中也称生成与测试,是一种非常低效的解决问题的技术,方法包括了系统地枚举解决方案的所有可能候选项,以及检查每个候选项是否符合问题描述。

找出自然数n的约数的暴力搜索算法将枚举出从1到n的所有整数,并检查它们中的每一个是否除n后没有余数。针对八皇后问题的暴力搜索算法会检查所有在8X8棋盘上八个“皇后”可能的摆放方法,并且,对每一种摆放方法,检查其每一个“皇后”是否能攻击到其它人。

虽然暴力搜索很容易实现,并且如果解决方案存在,它就一定能够找到。但是它的代价是和候选方案的数量成正比,由于这一点,在很多实际问题中,消耗的代价会随着问题规模的增加而快速地增长。因此,当问题规模有限,或当存在可用于将候选解决方案的集合减少到可管理大小的针对特定问题的启发式算法时,通常使用暴力搜索。另外,当实现方法的简单度比速度更重要的时候,也会用到这种方法。

例如,在关键的应用中,或当用计算机证明数学定理时,算法中的任何错误将会导致严重的后果。暴力搜索也可在其他基准化算法和启发式算法里用作基准方法。事实上,暴力搜索可以被看作最简单的启发式算法。暴力搜索与回溯概念是不相同的,在回溯算法中,大量的解决方案并没有被枚举而直接被丢弃(例如上文提到的“八皇后问题”的解决方案)。用于在表中查找一个项目,也就是说顺序地检查表中所有条目的暴力方法被称为线性搜索。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C、C++系列-1】C语言实现:寻找[1,100]之间的素数 的相关文章

  • C语言例题 4/100

    题目 xff1a 输入某年某月某日 xff0c 判断这一天是这一年的第几天 xff1f include lt stdio h gt int main int day month year sum leap printf 34 n请输入年 月
  • 贝叶斯网络python实现_朴素贝叶斯和贝叶斯网络算法及其R语言实现

    原标题 xff1a 朴素贝叶斯和贝叶斯网络算法及其R语言实现 作者 xff1a 鲁伟 一个数据科学践行者的学习日记 数据挖掘与机器学习 xff0c R与Python xff0c 理论与实践并行 个人公众号 xff1a 数据科学家养成记 微信
  • 打印1-100之间所有素数

    代码 方法1 方法2 执行结果 求1 10之间非素数之和
  • C语言实现 Josegh()函数

    问题 设有n个人围坐一圈并按顺时针方向从1到n编号 xff0c 从第s个人开始进行1到m的报数 xff0c 报数到第m个人 xff0c 此人出圈 xff0c 再从他的下一个人重新开始1到m的报数 xff0c 如此下去直到所有的人都出圈为止
  • git clone github_提高github下载速度的方法100%有效可达到2MB/s

    点击上方 Python全家桶 xff0c 星标 或 34 置顶 34 关键时刻 xff0c 第一时间送达 作者 kcx64 本文仅做分享 xff0c 若有侵权请联系小编 第一时间删文 阅读本文大概需要 2 8 分钟 因为大家都知道的原因 x
  • 量化投资学习——A股H股套利年化100%

    一 交易对象选取 首先是选取数据 xff0c 选取数据的来源是wind xff1a 从wind中的交易数据 AH比较 里面可以看到历史收盘价和A H溢价率 xff0c 考虑到在2008年金融危机之后 xff0c 全球市场发生了较大的变化 x
  • ubuntu下串口发送或者接收(c语言实现)minicom调试

    关于串口的知识这里就不累赘了 xff0c 看着多又烦 xff0c 搞这个的都懂串口 xff0c 不多废话了 xff01 xff01 进入正题 xff01 xff01 1 选择合适的usb串口模块 某宝很多这种模块 xff0c 有各种型号的
  • C语言经典面试题100道(校对详解版)

    题目非本人整理 xff0c 转载于https blog csdn net qq 42613510 article details 81225935 做了校对与详解 xff0c 方便大家参考 最后编程答案自己做的 xff0c 还没写完 xff
  • C++服务器开发100个知识要点C++RAII惯用法

    最初的写法 在笔者刚学习服务器开发的时候 xff0c 公司给笔者安排了一个练习 xff1a 在 Windows 系统上写一个 C 43 43 程序 xff0c 用该程序实现一个简单的服务 xff0c 在客户端连接上来时 xff0c 给客户端
  • PID控制算法的C语言实现

    PID控制算法的C语言实现一 PID算法原理 最近两天在考虑一般控制算法的C语言实现问题 xff0c 发现网络上尚没有一套完整的比较体系的讲解 于是总结了几天 xff0c 整理一套思路分享给大家 在工业应用中PID及其衍生算法是应用最广泛的
  • 20万到100万年薪的算法工程师有什么区别?

    公元七世纪 xff0c 在车迟国国家气象局组织的一次求雨活动中 xff0c 虎力 鹿力 羊力三位大仙成功地祈下甘霖 xff0c 救黎民于水火中 老国王虽然不明就里 xff0c 却从此尊他们为国师 xff0c 奉道教为圭臬 本世纪 xff0c
  • 【100%有效】解决AndroidStudio 控制台编译输出中文乱码,亲测解决!

    背景 在AndroidStudio中新建了一个Java Module xff0c 但是点击 Run app 之后 xff0c Build Output 控制台输出的中文都是乱码 xff0c 都是问号一样的字符 google了很多方法 xff
  • C语言实现“井字棋”游戏(三子棋)人机对弈

    井字棋游戏 xff1a 即三子棋 xff0c 英文名叫Tic Tac Tic xff0c 是一种在3 3格子上进行的连珠游戏 xff0c 和五子棋比较类似 xff0c 由于棋盘一般不画边线框 xff0c 格线排成井字故得名 题目分析 xff
  • C++ 求100的阶乘

    include lt iostream gt using namespace std int main int n int k 61 1 k为当前的位数 int fact 10000 61 1 0 cout lt lt 34 输入阶乘n 3
  • MessageFilter [target=odom ]: Dropped 100.00% of messages so far.问题解决

    错误提示 WARN 1580994954 426403779 MessageFilter target 61 odom Dropped 100 00 of messages so far Please turn the ros gmappi
  • Linux下的UDP服务器客户端的搭建(C语言实现)

    大家好 xff0c 我是练习编程时长两年半的个人练习生昆工第一ikun xff0c 昨天我们说了搭建TCP的服务器和客户端 xff0c 今天我们就来分享一下UDP的服务器和客户端搭建 UDP的特点是无连接 xff0c 多个客户端可以发送消息
  • C++:C语言实现HTTP的GET和POST请求

    https www cnblogs com diligenceday p 6255788 html
  • C语言实现TCP服务器与客户端通信

    以上是TCP通信客户端与服务器实现通信的基本原理流程图 1 客户端的实现 xff08 4个步骤 xff09 1 1创建socket对象 1 2请求连接 1 3发送数据 1 4关闭套接字 include lt stdio h gt inclu
  • 汉诺塔问题—C语言实现

    一 题目描述 相传在古印度圣庙中 xff0c 有一种被称为汉诺塔 Hanoi 的游戏 该游戏是在一块铜板装置上 xff0c 有三根杆 编号A B C xff0c 在A杆自下而上 由大到小按顺序放置64个金盘 如下图 游戏的目标 把A杆上的金
  • C语言实现TCP编程

    C语言实现TCP编程 1 主机字节序和网络字节序2 套接字的地址结构IP地址转化的方法 3 TCP的网络接口4 TCP服务器端的编程流程5 TCP客户端的编程流程6 运行结果 1 主机字节序和网络字节序 主机字节序 xff1a 不同的芯片

随机推荐