python练习1:素数

练习一: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)

原博连接

猜你喜欢

转载自blog.csdn.net/qq_33414553/article/details/78848595