python找质数

创建一个长度为 n+1, 值全为True的数组,在2——√n之间取值i 标记索引为 i —— n+1 之间 i 的倍数为False, 返回所有值为True的值

# -*- coding:utf-8 -*-
import math


def prime_up_to(n):
    primes = [True] * (n + 1)

    for i in range(2, int(math.ceil(math.sqrt(n)))):
        if primes[i]:
            for o in range(i*2, n + 1, i):
                primes[o] = False
    return [p for p in range(2, n + 1) if primes[p]]


num = input("type a number: ")
print(prime_up_to(num))