CDays–5 习题三(求质数)及相关内容解析。
今天让我们完成CDays –5 的最后一项内容吧。
寻找质数似乎是一个数学问题。让我们用Python实现它吧。
首先,我们需要明确质数是什么,根据百度百科有如下表述:
数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。素数在数论中有着很重要的地位。比1大但不是素数的数称为合数。1和0既非素数也非合数。质数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一。基于质数定义的基础之上而建立的问题有很多世界级的难题,如哥德巴赫猜想等。算术基本定理证明每个大于1的正整数都可以写成素数的乘积,并且这种乘积的形式是唯一的。这个定理的重要一点是,将1排斥在素数集合以外。如果1被认为是素数,那么这些严格的阐述就不得不加上一些限制条件。
如此看来,我们的循环只需要从2到100了。因为1被排除在质数之外了。
我们如何确定一个数是否为质数呢。我们的想法很简单,就是用2到这个数内所有的整数对它取余。先让我们实现这个小功能。
我们还不知道怎么输入呢,那就先定义一个数好了。
import math num=73 for i in range(2,num+1): if (math.fmod(num,i) == 0.0) : break if (i==num): print "The num is Prime Number." else: print "The num isn't Prime Number."
程序挺简单的,我想如果有C语言基础的话,这应该是挺容易看懂的。
需要强调的是下面的定义
range(x,y)
这个的意思是产生 x 到 y-1 的整数序列.
那么让我们用这个小程序循环起来,判断1-100 中的质数,并输出.
import math ins=0 for num in range(1,101): for ins in range(2,num+1): if (math.fmod(num,ins) == 0.0): break if (ins == num ): print '%d' % num,
但是我们的数学知识告诉我们,并不需要这么多循环,除数到开根就可以了。
我们进一步优化程序。
import math ins=0 for num in range(0,101): for ins in range(2,math.sqrt(num)+1): if (math.fmod(num,ins) == 0.0): break if (ins == num ): print '%d' % num,

运行出错,不过没有关系,让我们看一下输出。
第四行的range的两个数都应该是整数,恩,这个好办,int( ) 就是用来做这个的。
import math ins=0 for num in range(2,101): flag=1; for ins in range(2,int(math.sqrt(num))+1): if (math.fmod(num,ins) == 0.0): flag=0; break if (flag == 1): print '%d' % num,
在这里面flag是标志位,用来表示是否有数可以整除num。
啄木鸟论坛给出了更简便的解法。如下
result2 = [ p for p in range(2, N) if 0 not in [ p% d for d in range(2, int(sqrt(p))+1)] ] print result2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述