用来练手的python 练习题,原链接 : python练习实例12
题干 : 判断101-200之间有多少个素数,并输出所有素数
源代码如下:
import numpy as np
bound = np.arange(101,201,1)
result = np.array([])
for k in bound:
for i in range(k):
# 如果k存在不是1或k本身的因数i,则k不是素数
if k/(i+1) == k//(i+1) and (i+1)!=k and (i+1)!=1:
break
elif i+1 == k:
result = np.append(result, k)
print(result)
输出结果如下 :

上述代码是对范围内的所有整数k,都遍历小于它的所有整数,如果找到不是1和k本身的因数,则k不是素数,反之,k是素数。实际在找素数k的时候,我们只需要判断在
2
−
k
2-\sqrt{k}
2−k范围内是否有k的因数。下面放标准答案:
h = 0
leap = 1
from math import sqrt
from sys import stdout
for m in range(101,201):
k = int(sqrt(m + 1))
for i in range(2,k + 1):
if m % i == 0:
leap = 0
break
if leap == 1:
print '%-4d' % m
h += 1
if h % 10 == 0:
print ''
leap = 1
print 'The total is %d' % h
本文对比了两种Python实现判断101-200之间素数的方法。初始方法使用双重循环,效率较低;优化后的算法仅检查到根号k,大幅提高效率。优化算法首先计算目标数的平方根,然后从2到该平方根遍历,若找不到因数,则判断为素数。
1万+

被折叠的 条评论
为什么被折叠?



