求解素数-埃拉托斯特尼筛法

来源:互联网 发布:淘宝盖楼是什么 编辑:程序博客网 时间:2024/04/29 11:05

该算法来自 百度百科

def primes(n):    P = []    f = []    for i in range(n+1):        if i > 2 and i%2 == 0:            f.append(1)        else:            f.append(0)    i = 3     while i*i <= n:        if f[i] == 0:            j = i*i             while j <= n:                f[j] = 1                 j += i+i         i += 2    P.append(2)    for x in range(3,n,2):        if f[x] == 0:            P.append(x)    return Pn = 50   P = primes(n)print P

要得到自然数n以内的全部素数,必须把不大于 的所有素数的倍数剔除,剩下的就是素数。
给出要筛数值的范围n,找出n以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去……。

下面是小学生的算法,我的

def is_prime(n):    if n < 2:        return False    i=2    while i < (n/2 + 1):        if n % i == 0:            return False        i+=1    return Trueprint is_prime(17)
0 0
原创粉丝点击