练习一:python实现n以内素数
#!/bin/env python
#--coding:utf-8--
import math
import sys
def prime(n):
if n <= 1:
return 0
#for i in range(2,int(math.sqrt(n)+1)):
for i in range(2,n):
if n%i == 0:
return 0
return 1
if __name__ == "__main__": //写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行
n = int(sys.argv[1])
for i in range(2,n+1):
if prime(i):
print i
Traceback (most recent call last):
File “prime.py”, line 13, in
n=int(sys.argv[1])
IndexError: list index out of range
解决: python prime.py 1000
没加参数
原理:n除比n小的所有数都为0 如果prime(n) return 1,则把i输出
方法二:埃氏筛法
首先将2到n范围内的整数写下来,其中2是最小的素数。将表中所有的2的倍数划去,表中剩下的最小的数字就是3,他不能被更小的数整除,所以3是素数。再将表中所有的3的倍数划去……以此类推,如果表中剩余的最小的数是m,那么m就是素数。然后将表中所有m的倍数划去,像这样反复操作,就能依次枚举n以内的素数,这样的时间复杂度是O(nloglogn)。
#--coding:utf-8--
import sys
def prime(n):
flag = [1]*(n+2)
//为什么flag要这么写?
p=2
while(p<=n):
print p
for i in range(2*p,n+1,p):
flag[i] = 0
while 1:
p += 1
if(flag[p]==1):
break
if name == “main“:
n = int(sys.argv[1])
prime(n)