面试题:求质数的算法
质数也就是大于1的整数中,除了1和它本身以外不能被其他整数整除的数,也叫素数。
问题:
现给定一个任意整型参数 N(N>1),求出小于N 的质数的个数。
例如:
输入 10,输出:4(2,3,5,7); 输入:20, 输出: 8(2,3,5,7,11,13,17,19);
针对小于N的每个正整数x,我们可以遍历从2到x-1遍历去试除,当出现一个数能被整除,那这个数就不是质数;当然这种方法也是最容易想到的方法,但效率也是最低的方法;
def prime(n):
m = 0
res = []
for i in range(2, n):
for j in range(2, i-1):
if i % j == 0:
break
else:
res.append(i)
m += 1
return m,res
if __name__ == "__main__":
n = 20
print(prime( n))
我们可以遍历从2到x/2的数去试除,这样子相对于第一种方法节省了近一半的时间;
def prime( n):
m = 0
for i in range(2, n):
for j in range(2, int(i/2)+1):
if i % j == 0:
break
else:
m += 1
return m

浙公网安备 33010602011771号