美丽的质数螺旋
质数螺旋是指质数的分布在自然数逆时针旋转排列图像上呈现出的螺旋图像。1963年的一天,美籍波兰数学家 斯塔尼斯拉夫·乌拉姆参加了一场学术会议,会议期间他在一张草稿纸上用整数画了一幅螺旋图,他发现质数的分布不是杂乱无章的,而是像螺旋线一样。该现象引起了人们的兴趣,但是到目前为止无人能解释产生该现象的原理
for循环的海报——访问LearnICT.it获得更多
本节以下内容属于扩展内容,讲解用双层for循环“找质数”这样一个实际问题。对于大部分基础课的朋友来说,请看上一节“for循环”基础内容链接
张丽丽
For循环基础应知内容点击以下链接
我们讲解了for循环的基本知识
并且在最后提出了一个很好的问题:
如何编程让计算机找出1-100以内的质数
我们给出了以下一段代码
(当然还会有其他的解决方法的代码)
短短几行代码就解决了找质数这个问题
但是你明白代码是怎么“告诉”计算机
解决这个问题的吗?
下面我们一步一步来看
先看质数的定义
一个大于1的自然数,除了1和它本身外,不能被其他自然数整除
2是最小的质数
比如2,3,5,7,11,13,17,19,23,29,31
我们想让计算机找出100以内的质数
那我们就按照质数的定义来测试
采用排除法
比如我们想测试下3是不是质数
那就测试下:用3分别除以3之前的数(不用除以1)
3÷2
只要能整除,那就扔了它
因为它已经不符合质数的定义了
(3符合质数定义是质数,留着!)
比如我们想测试下6是不是质数
测试用6分别除以6之前的数(5,4,3,2)
6÷5,6÷4,6÷3,6÷2
只要其中有一个算式能整除就扔了吧(不符合定义)
(6÷3余数0,能整除,不是质数,扔之!)
这就是我们想的找质数的方法
(再次提示上图
当我们想知道5是不是质数就用5分别除以5之前的所有整数
只要有一个等式能整除,它就不是质数
以此类推哟)
如何体现到程序呢?
我们想,应该首先有一个命令
让计算机从1开始一个一个的数到99
正好有我们刚学的for循环
for num in range(2,100)
这个就是我们代码的第一行for循环
range(2,100)是一个整数列表
表示范围从2到99的整数
当然你也可以这么写
[2,3,4,5,6,7,8,9...99]
不过这要写的好累的!
为什么从2开始?
因为最小的质数是2,而1没有必要了
所以执行了第一行程序时
变量num就从2,3,4,5逐渐变到99了
(num从1开始循环数到99)
第二行代码
for i in range(2,num)
想一想变量i是怎么循环的呢?
比如当num是4的时候
那i就取2,3两个值
比如当num是5的时候
那i就取2,3,4三个值
比如当num是6的时候
那i就取2,3,4,5四个值
依次类推
第三、四行代码
if num % i == 0:
break
想一想我们上面说的排除法
如果余数等于0证明可以整除
那就不是质数了
所以扔了它
break
就实现了“扔了”这个数的功能
break表示跳出当前的循环(第二层for循环)
接着执行第一层for循环的下一个数
如果当前测试的数没有被它之前的数整除的
就执行第五、六行代码了
else:
print(num)
这个输出的就是质数了
晕不晕?
不晕
你太棒了
晕,也没有关系
因为我也晕哈
以后大家会慢慢理解的
而且这里面的break的用法
我还没给大家详细讲解
以后的进阶课再说吧
我也擦擦汗去凉快下了
转载事宜请留言获得授权方可转载
本平台所使用的图片归相关权利人所有,因客观原因造成不当使用请随时与本平台联系,以协商授权事宜
领取专属 10元无门槛券
私享最新 技术干货