Sth about Python 07 -- if-else缩进的一个说明

判断一个数是否为素数

x = int(raw_input('Enter a positive number:'))
for i in range(2,x):
if x % i ==0:
print 'x is not a prime.'
break
else:
print 'x is a prime.'

在这个小程序里,if-else的缩进和以往的有些不同,它和for在一个缩进级别。
具体说明如下:
1、如果if-else缩进一样,程序输出结果会出现好几次
2.如果if-else缩进不一致则说明循环非正常结束才执行else,如果喜欢正常结束则不执行else。

另:可以把range的第二个参数改为‘int(math.sqrt(num) + 1)’可以提高程序执行效率。

加快搜索质数int(math.sqrt(num) + 1)
原因为非素数(即合数)最小的约数小于等于其开根。
根据素数的定义:除了1和自身之外,没有别的约数。
对于一个数x,从集合range(2,x),即[2,3,....x-1]中,从2开始,如果找到了一个约数m,那么x就不是素数,找不到则x就是素数。
假设x(x > 2)是一个非素数(即合数),x最小的约数为m(m >= 2),则最大的约数为n(n = x / m),
m <= n
m <= (x/m)
m**2 <= x
m <= math.sqrt(x)
即非素数最小的约数小于等于其开根(对应python中的 math.sqrt(x))
而函数 range(2, x)返回的集合最后一个数为 x-1, 所以x参数要设置为开根+1,即math.sqrt(x)+1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,860评论 0 33
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 2,049评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,217评论 0 41
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    磨砺营阅读 736评论 0 6
  • 洒泪挥别一路护航陪你踏入大学的父母,独自面对这里的琳琅满目,你内心涌起的是巨大自由的欣喜,还是无限的失望和恐慌?...
    群玉秉辉阅读 773评论 4 1

友情链接更多精彩内容