前言

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

质数又和 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. flutter系列之:永远不用担心组件溢出的Wrap

    目录 简介 Row和Column的困境 Wrap组件详解 总结 简介 我们在flutter中使用能够包含多个child的widget的时候,经常会遇到超出边界范围的情况,尤其是在Column和Row的 ...

  2. Jquery对类的操作

    Jquery对类的基本操作 $("#Div_BillSon div").on('click', function (e) { $("#Div_BillSon") ...

  3. nordic——nrf52系列SWD设置回读保护

    在开发时可能需要回读保护功能,在产品出厂后这个功能可以让你的代码更加安全,无法用SEGGER或者其余方式读取你的代码HEX文件,也就是禁用SWD下载接口.但是SWD锁住了,还想使用(从新下载代码)也是 ...

  4. 记录第一次在Linux环境编译第三方C++库

    要使用clion编程,需要curl库,在官网下载源代码自己编译:https://curl.haxx.se/download.html 解压后进入路径,配置编译选项: 1 # ./configure - ...

  5. Vue router简单配置入门案例

    { 注意驼峰命名法,不然会报错 } 1.在Views文件夹下创建Vue路由文件,例如: <template> </template>  <script> </ ...

  6. Java单例模式,看这一篇就够了

    在创建型设计模式中,我们第一个学习的是单例模式(Singleton Pattern),这是设计模式中最简单的模式之一. 单例是什么意思呢? 单例就是单实例的意思,即在系统全局,一个类只创建一个对象,并 ...

  7. Uniapp And Taro一些小测评

    前情 最近公司准备新开发一个小程序项目,对于使用哪一款小程序框架有一些犹豫,我有过2年左右的uniapp项目开发经验,Taro在刚刚出来的时候有尝试过,经常莫名报错需要重启,在内心是有些偏向uniap ...

  8. 详解从浏览器地址栏输入URL到页面显示的步骤

    版本1(基础版本) 步骤1:浏览器根据请求的 URL 交给 DNS 域名解析,找到真实 IP ,向服务器发起请求: 步骤2:服务器交给后台处理完成后返回数据,浏览器接收⽂件( HTML.JS.CSS ...

  9. perl中ENV的使用

    在打印环境变量的时候可以用到.实际上是%ENV,perl中的哈希变量,里面保存的是环境变量.键是环境变量名,值是环境变量值.例如,有一个环境变量是PATH,其值为C:\windows,那么,打印这个环 ...

  10. SpringBoot使用poi实现导出excel

    //实体类 //导出的数据的实体 public class User { private String id; private String name; private String year; // ...