题目
计算素数函数f(N)代表素数的个数小于等于N 例如 f(17)=7 , 因为前7个素数为 2,3,5,7,11,13,17
思路
1、首先创建一个布尔类型的数组(Python 中用列表模拟)来标记每个数是否为素数,初始默认都设为True(表示是素数),除了 0 和 1 标记为False。 2、然后从 2 开始遍历,如果当前数是素数(对应数组元素为True),就将其计数加 1,并把它的倍数(从它的平方开始,因为小于它平方的倍数已经在前面被更小的素数筛掉了)都标 记为False(即不是素数)。 3、最后遍历完所有小于等于N的数后,返回素数的个数。
代码
def f(N): if N < 2: return 0 check = [True] * (N + 1) check[0] = check[1] = False count = 0 for num in range(2, N + 1): if check[num]: count += 1 for i in range(num * num, N + 1, num): check[i] = False return count def main(): n=int(input()) print(f(n)) if __name__ == '__main__': main()
时间复杂度要小于 O(n*ln n )