您的位置:首页 > 编程语言 > Python开发

素数的实现--python

2016-12-16 15:11 477 查看
                                             
                                           python 多种方式实现求素数


1,最偷懒的python实现方式,一行代码实现

>>> [x for x in range(2,101) if not[y for y in range(2,int(x**0.5+1)) if x % y ==0]]

[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]

>>>

2,低效率实现和函数实现

#!/usr/bin/env python
#coding:utf-8
#多种方法实现求素数

#最简单的求素数方法,效率低
# n = 100
# lst = []
# count = 0
# for i in range(2,n):
#     for j in range(2,i):
#         if i % j ==0:
#             break
#     else:
#         lst.append(i)
#         count += 1
# print lst
# print "素数个数:%s" %count

#根据定义求素数
import math
import  time
lst = []
count = 0
def prime(n):
global count            #global定义全局变量,不加全局变量,函数外定义变量,函数内修改了值,会报错
for i in range(2,n+1):
for j in range(2,int(math.sqrt(i)+1)):
if i%j == 0:
break
        else:
lst.append(i)
count += 1
print lst
starttime = time.clock()  #程序开始时间
prime(10000)
endtime = time.clock()    #程序结束时间
print "素数的总个数为{}".format(count)
print "求素数用时:{}".format(endtime - starttime)


3,筛选法实现

该方法代码还没有研究出来,后续会补充进来

所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。

具体做法如下:

<1> 先将1挖掉(因为1不是素数)。

<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。

<3> 用3去除它后面的各数,把3的倍数挖掉。

<4> 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找1~50的素数,要一直进行到除数为47为止(事实上,可以简化,如果需要找1~n范围内素数表,只需进行到除数为n^2(根号n),取其整数即可。例如对1~50,只需进行到将50^2作为除数即可。)

如上算法可表示为:

<1> 挖去1;

<2> 用刚才被挖去的数的下一个数p去除p后面各数,把p的倍数挖掉;

<3> 检查p是否小于n^2的整数部分(如果n=1000, 则检查p<31?),如果是,则返回(2)继续执行,否则就结束;

<4> 纸上剩下的数就是素数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python