前言

质数历来都是数学界的宠儿,是数学里神秘的谜团。

质数又和 C 语言有着不解之缘,本篇文章将讲解如何用 C 语言判断质数。

为了方便大家在读完此文章后使用文中程序,我会将判断质数的程序封装成函数,此函数的功能是:判断形参 _number 是否是质数,若 _number 是质数,则返回 1;若不是质数,则返回 0

何为质数

质数又称素数。一个大于 1 的自然数,除了 1 和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定 1 既不是质数也不是合数)。

C 语言判断质数

在了解了质数的定义后,现在我们便可以着手编写程序啦。

现在给定一个正整数 number,要求我们判断此数是否为质数。针对这一要求本篇采用两种判断方法,分别是:暴力求解 与 巧用平方根。

暴力求解

通过质数的定义可以得到如何判断一个数是否为质数, 我们可以通过遍历从 2number - 1 这个区间中的所有数,如果都不能被 number 整除,则 number 是质数,否则 number 不是质数。

具体代码如下:

/****************************************************************************
* 函数名: Judge_PrimeNumber
* 功能描述:判断一个数是否为质数
* 输入参数:
* _number:需要判断的数
* 返回值:
* 1:是质数
* 0:不是质数
* 外部参数:无
* 注意事项:无
*
* 作者: 梁国庆
* 日期: 2021-12-11
* 修改记录:
****************************************************************************/
int Judge_PrimeNumber(int _number)
{
int i = 0; if (_number < 2)
{
return 0; /* 需要判断的数小于 2,则不是质数,返回 0 */
} for (i = 2; i < _number; i++) /* 遍历从 2 到 _number - 1 区间中的所有数 */
{
if (_number % i == 0)
{
return 0; /* 若可以被整除,则不是质数,返回 0 */
}
} return 1; /* 若执行完以上程序均未返回,则是指数,返回 1 */
}

巧用平方根

使用暴力求解固然可以求出一个数是否为质数,但运算次数是最多的,运行速度也是最慢的,我们还可以将程序进行优化,提升程序运行时的效率。

在一般领域,对正整数 number,如果用 2 到 $\sqrt{number}$ 之间的所有整数去除,均无法整除,则 number 为质数。那么就可以利用这一方法,巧用平方根判断一个数是否为质数。

在 C 语言中求平方根可以使用 C 标准库,<math.h> 头文件中定义了各种数学函数,sqrt() 函数是平方根函数,功能是计算一个非负实数的平方根,调用时程序要包含 <math.h> 头文件。

具体代码如下:

/****************************************************************************
* 函数名: Judge_PrimeNumber
* 功能描述:判断一个数是否为质数
* 输入参数:
* _number:需要判断的数
* 返回值:
* 1:是质数
* 0:不是质数
* 外部参数:无
* 注意事项:无
*
* 作者: 梁国庆
* 日期: 2021-12-11
* 修改记录:
****************************************************************************/
int Judge_PrimeNumber(int _number)
{
int i = 0; if (_number < 2)
{
return 0; /* 需要判断的数小于 2,则不是质数,返回 0 */
} for (i = 2; i <= sqrt(_number); i++) /* 遍历从 2 到 √_number 区间中的所有数 */
{
if (_number % i == 0)
{
return 0; /* 若可以被整除,则不是质数,返回 0 */
}
} return 1; /* 若执行完以上程序均未返回,则是指数,返回 1 */
}

如何调用函数

对于如何使用 C 语言判断质数,共讲解了两种方法并分别将编写的程序封装成为函数,现在我们来讲解一下如何在实际应用中调用它们。

在这里,我以巧用平方根为例进行讲解(暴力求解的调用方法与之相同),也特别推荐大家在以后的使用中优先选择巧用平方根这种方法,因为通过平方根进行判断是运算次数最少的,可以极大的提高我们程序的效率。

样例代码中,我们输入一个整数,然后调用判断质数的函数,若输入的数是质数则输出 Yes,否则输出 No

具体代码如下:

#include <stdio.h>
#include <math.h> /* 包含 <math.h> */ /****************************************************************************
* 函数名: Judge_PrimeNumber
* 功能描述:判断一个数是否为质数
* 输入参数:
* _number:需要判断的数
* 返回值:
* 1:是质数
* 0:不是质数
* 外部参数:无
* 注意事项:无
*
* 作者: 梁国庆
* 日期: 2021-12-11
* 修改记录:
****************************************************************************/
int Judge_PrimeNumber(int _number)
{
int i = 0; if (_number < 2)
{
return 0; /* 需要判断的数小于 2,则不是质数,返回 0 */
} for (i = 2; i <= sqrt(_number); i++) /* 遍历从 2 到 √_number 区间中的所有数 */
{
if (_number % i == 0)
{
return 0; /* 若可以被整除,则不是质数,返回 0 */
}
} return 1; /* 若执行完以上程序均未返回,则是指数,返回 1 */
} int main()
{
int N = 0; scanf("%d", &N); if (Judge_PrimeNumber(N) == 1) /* 调用判断质数的函数,判断输入的整数 N */
{
printf("Yes\n"); /* 是质数,则输出 Yes */
}
else
{
printf("No\n"); /* 否则输出 No */
} return 0;
}

后记

至此,我们讲解了关于质数的定义,带领大家编写了 C 语言判断质数的程序代码,并将所写代码封装成为函数,同时为大家演示了如何调用函数来判断质数。

相信看完本篇文章的你,以后再遇到 C 语言判断质数的问题,可以解决的游刃有余。

一文解决如何使用 C 语言判断质数(素数)[ 附解析与源码 ]的更多相关文章

  1. 图解Go语言的context了解编程语言核心实现源码

    基础筑基 基于线程的编程语言中的一些设计 ThreadGroup ThreadGroup是基于线程并发的编程语言中常用的一个概念,当一个线程派生出一个子线程后通常会加入父线程的线程组(未指定线程组的情 ...

  2. C/C++编程笔记:C语言开发球球大作战(源码分享),你想试试吗?

    游戏背景 <球球大作战>是Superpop一款自主研du发的免费手机网络游戏. 以玩家间的实时互动PK产生游戏乐趣为设计宗旨,通过简单的规则将玩家操作直接转化为游戏策略,体验智谋碰撞的战斗 ...

  3. 解决 maven项目在eclipse中debug时看不到源码问题

    第一步: 第二步:Configurations 里面的source里面是Default.把Defaul删除,选java project ,然后添加自己的项目 第三步:选中,并用命令跑tomcat 这样 ...

  4. 基于c语言数据结构+严蔚敏——线性表章节源码,利用Codeblocks编译通过

    白天没屌事,那我们就来玩玩线性表的实现吧,快要失业了,没饭吃了咋整哦 题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B ...

  5. C#中弹出文件选择窗体和判断是否下载提示窗体的源码

    1.创建一个window窗体

  6. 【读fastclick源码有感】彻底解决tap“点透”,提升移动端点击响应速度

    申明!!!最后发现判断有误,各位读读就好,正在研究中.....尼玛水太深了 前言 近期使用tap事件为老夫带来了这样那样的问题,其中一个问题是解决了点透还需要将原来一个个click变为tap,这样的话 ...

  7. linux下c语言源码编译

    一.源码编译过程   源码  ---> 预处理 ---> 编译 ---> 汇编 ---> 链接 --->执行    我们可以把它分为三部分来完成: ./configure ...

  8. jenkins持续集成源码管理选项为None,构建失败找不到git.exe解决办法

    我的jenkins版本为Jenkins ver. 2.19.1 1.源码管理选项只有None的解决办法: 在插件管理中心,搜索对应的源码管理插件这里以git为例,搜索git plugin点击右下角的安 ...

  9. 在MyEclipse显示struts2源码和doc文档及自动完成功能

    分类: struts2 2010-01-07 16:34 1498人阅读 评论(1) 收藏 举报 myeclipsestruts文档xmlfileurl 在MyEclipse显示struts2源码和d ...

  10. jQuery 源码分析和使用心得 - 文档遍历 ( traversing.js )

    jQuery之所以这么好用, 首先一点就是$()方法和它强大的选择器. 其中选择器使用的是sizzle引擎, sizzle是jQuery的子项目, 提供高效的选择器查询. 有个好消息告诉大家, 就是s ...

随机推荐

  1. 靶机: easy_cloudantivirus

    靶机: easy_cloudantivirus 准备 下载靶机(Target):https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/ ...

  2. LcdToos如何在线对屏进行读写指令调试

    在实际屏调试过程中,工程师经常需要对屏的寄存器频繁进行参数修改和读取测试,LcdTools针对这个做了很好的支持,可以在线进行指令调试,大大提高调试效率. 打开点屏工程,连接PX01并使模组上电点亮. ...

  3. Windows7下驱动开发与调试体系构建——0.概述

    本文集内容为windows7x64下驱动开发与调试体系构建,内容目录如下: 1.驱动开发的环境准备 2.R3与R0的通信示例 3.自建调试体系概述 4.在x64下使用汇编代码 5.实战反调试标记位(N ...

  4. 初识vue3.0

    vue3.0 源码组织方式的变化 采用ts重写 独立的功能模块提取到单独的包中 90%的api兼容Vue2.x Composition API 组合api 解决vue2.x options api 开 ...

  5. Jmeter之聚合报告“造假”

    通过Jmeter,模拟一个"虚假"的聚合报告,可"应付"日常现场项目的性能测试验收.本文档着重介绍jmeter的固定定时器,通过设置随机的延迟时间(如想业务场景 ...

  6. hadoop配置day01

    hadoop 安装jdk 配置文件: sudo vim /etc/profile 配置文件: export JAVA_HOME=/home/hadoop/jvm/jdk1.8.0_341 export ...

  7. NC-日志配置及代码详解

    目录 一.日志文件输出说明 二.日志配置说明 2.1 配置文件路径 2.2 配置格式 2.2.1 参数说明 三.代码说明 四.自定义日志实例 实例1-新建日志类 实例2-直接在代码中使用日志输出 五. ...

  8. Django更换数据库和迁移数据方案

    前言 双十一光顾着买东西都没怎么写文章,现在笔记里还有十几篇半成品文章没写完- 今天来分享一下 Django 项目切换数据库和迁移数据的方案,网络上找到的文章方法不一,且使用中容易遇到各类报错,本文根 ...

  9. K8Snode节点管理集群资源方法

    1.1 方法1 1.将master的admin.conf 文件拷贝到 node节点 [root@k8s-m ~]#scp /etc/kubernetes/admin.conf root@192.168 ...

  10. leetcode学习记录2.13

    [13] 罗马数字转整数 import java.util.HashMap; import java.util.Map; /* * * [13] 罗马数字转整数 * * https://leetcod ...