学习算法的第二天——复习欧拉筛法

很简单。欧拉筛法就是用于处理素数的问题。

先放上一般的代码。(最近在学Python)

def IsPrime(num):

    if(num % 2 == 0):

        return False

    else:

        for i in range (2,int(num ** 0.5)):

            if(num % i == 0):

                return False

        return True

    return

用这个函数应该可以处理一般的素数问题了。但是——

它不够快。

所以,欧拉筛出来了。

N = int(input("请输入一个大于2的整数:"))
result = list()
isPrime = [True for _ in range(N)]
for i in range(2, N):
    if isPrime[i]:
        result.append(i)
    for e in result:
        if e * i >= N:
            break
        isPrime[e * i] = False
        if i % e == 0:
            break

print(result)

(此代码可用于处理产生输入的N与2之内的素数)

首先,欧拉筛的主要思想就是首先生成一个列表。然后认定2是素数,然后2的倍数就不是素数了,把isPrime改成False,接着处理3,3 * 2 不是素数, 3 * 3 不是素数。至于i % e == 0就退出,我的理解是为了让程序更快,举个例子的话就是。如果此时i = 6,e从2开始取,先 6 * 2 = 12 非素数,然后 6 * 3 = 18 非素数。这时,我不用继续乘了,6 * 4 可以交给当i = 18,e = 2 时处理。最后再把所有的IsPrime为True的数添加到result.最后打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值