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

你可能感兴趣的:(Sth about Python 07 -- if-else缩进的一个说明)