news 2026/10/1 21:35:16

C语言素数判断:从基础到优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言素数判断:从基础到优化

1. 什么是素数

素数(质数)是指大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数。例如 2、3、5、7、11 都是素数,而 4、6、8、9 不是素数。

2. 最基础的素数判断方法

最直观的思路是:对于一个数 n,从 2 开始一直试除到 n-1,如果存在某个数能整除 n,则 n 不是素数;否则 n 是素数。

#include<stdio.h>#include<stdbool.h>// 判断 n 是否为素数boolisPrime(intn){if(n<=1){returnfalse;// 1 和负数不是素数}for(inti=2;i<n;i++){if(n%i==0){returnfalse;// 能被整除,不是素数}}returntrue;}intmain(){intnum;printf("请输入一个整数:");scanf("%d",&num);if(isPrime(num)){printf("%d 是素数\n",num);}else{printf("%d 不是素数\n",num);}return0;}

3. 优化一:只需判断到 sqrt(n)

上面的方法虽然正确,但效率较低。观察可以发现:如果 n 有一个大于 sqrt(n) 的因数,那么必然存在一个小于 sqrt(n) 的因数与之对应。因此,只需要判断到 sqrt(n) 即可。

#include<stdio.h>#include<stdbool.h>#include<math.h>boolisPrime(intn){if(n<=1){returnfalse;}// 只需判断到 sqrt(n)for(inti=2;i<=sqrt(n);i++){if(n%i==0){returnfalse;}}returntrue;}

4. 优化二:跳过偶数

除了 2 以外,所有偶数都不是素数。因此可以先单独判断 2,然后从 3 开始只检查奇数,步长设为 2,这样可以将判断次数再减少一半。

#include<stdio.h>#include<stdbool.h>#include<math.h>boolisPrime(intn){if(n<=1){returnfalse;}if(n==2){returntrue;// 2 是唯一的偶素数}if(n%2==0){returnfalse;// 其他偶数都不是素数}// 只检查奇数for(inti=3;i<=sqrt(n);i+=2){if(n%i==0){returnfalse;}}returntrue;}

5. 综合示例:输出 1~100 之间的所有素数

下面是一个完整的示例程序,输出 1 到 100 之间的所有素数:

#include<stdio.h>#include<stdbool.h>#include<math.h>boolisPrime(intn){if(n<=1){returnfalse;}if(n==2){returntrue;}if(n%2==0){returnfalse;}for(inti=3;i<=sqrt(n);i+=2){if(n%i==0){returnfalse;}}returntrue;}intmain(){printf("1~100 之间的素数有:\n");for(inti=1;i<=100;i++){if(isPrime(i)){printf("%d ",i);}}printf("\n");return0;}

运行结果:

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

6. 总结

  • 素数判断的核心思路是试除法:从 2 开始逐个尝试能否整除 n。
  • 优化点一:判断范围缩小到 sqrt(n),大幅减少循环次数。
  • 优化点二:跳过偶数,只检查奇数,进一步减半。
  • 对于更大范围的素数筛选(如求 1~N 内所有素数),还可以使用埃拉托斯特尼筛法(埃氏筛),效率更高,感兴趣的读者可以进一步学习。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 21:34:13

聚合增长GEO案例效果怎么样,客户口碑如何

苏州聚合增长信息科技有限公司是国内专注服务制造企业的生成式引擎优化(GEO)服务商&#xff0c;核心业务是聚合AI GEO国内版与国际版代运营&#xff0c;为企业提供AI搜索时代的企业级AI全域营销解决方案&#xff0c;解决制造企业信息错位、获客成本高的痛点&#xff0c;实现从品…

作者头像 李华
网站建设 2026/10/1 21:33:59

维普查重降重工具推荐:2026年这几款能过检

维普的比对库跟知网不是一套逻辑&#xff0c;很多论文在知网查出来重复率不高&#xff0c;一提交维普就飙到30%以上。这种落差每年毕业季都在上演。本文就围绕维普查重降重这个具体需求&#xff0c;把几款实测过、确实能过检的工具摊开讲清楚&#xff0c;按学科和写作阶段帮你对…

作者头像 李华
网站建设 2026/10/1 21:31:22

WhatsApp 无法登录时如何查阅已有记录?本地归档的检索与排查方法

账号暂时无法访问时&#xff0c;首先要确认的不是“重新登录多少次”&#xff0c;而是手头已经保留了哪些资料。一个可阅读的 HTML 文件、一份消息表格&#xff0c;以及只能由原客户端打开的本地记录&#xff0c;使用条件并不相同。 本文以 WABak 已保存的记录为客户端示例&am…

作者头像 李华
网站建设 2026/10/1 21:30:38

Linux下npm start后台运行的三种方案:nohup、pm2与systemd详解

1. 项目概述&#xff1a;为什么“npm start”在Linux上不能直接扔后台&#xff1f;你刚用npm start启动一个前端开发服务&#xff08;比如 React/Vue 的 dev server&#xff09;或 Node.js 后端应用&#xff0c;顺手关掉终端——结果一刷新页面&#xff0c;404 或 Connection R…

作者头像 李华