素数的实现--python

                                                                                         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> 纸上剩下的数就是素数。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值