问题描述:
素数(质数)指的是不能被分解的数,除了1和它本身之外就没有其他数能够整除。
求100以内的所有素数。
我的代码:
import math
def prime(n):
count=0
for i in range(2,int(math.sqrt(n))+1):
if n%i==0:
count=1
if count!=1:
return True
else:
return False
a=[]
for j in range(2,100):
if prime(j):
a.append(j)
print a
结果:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
我的思路:
原理:在一般领域,对正整数n,如果用2到n的平方根之间的所有整数去除,均无法整除,则n为质数。
大致流程是:先定义一个函数,判断传入的数是否为素数,然后使用该函数遍历100以内的数,将满足的数添加进列表,最后再输出;
其中,count是一个状态检查器,值为1时表示不是素数,为0时表示是素数;
示例代码:
def isPrimeNumber(n, s):
for k in s:
if k * k > n: break
if n % k == 0: return None
return n
prime = []
for n in range(2, 100):
res = isPrimeNumber(n, prime)
if res: prime.append(res)
print prime
代码分析:
示例代码不是用一个数的2到n的平方根之间的所有整数去除,而是用所有的素数平方值小于该数之间的素数去除,所以,函数内,第一个if语句是判断(都是素数)列表s内的数的平方值大小,只保留小于n的素数,第二个if语句是判断n是否可以整除保留的素数,只有都无法整除时才说明n是一个素数并返回。
最后,遍历2到100以内的数,将满足函数的赋给res并添加进素数列表prime中,供下次使用;
题目出处:http://www.cheemoedu.com/exercise/19
来源:oschina
链接:https://my.oschina.net/u/2602330/blog/711978