|
发表于 2023-4-15 10:39:36
|
显示全部楼层
可以使用筛法(Sieve of Eratosthenes)来求解{1,2,3,...,N}中质数的个数。具体步骤如下:
初始化一个长度为N+1的布尔数组is_prime,其中is_prime[ i ]表示数字i是否为质数,初始值全部为true。
从2开始遍历到N,对于每个数i,如果is_prime[ i ]为true,则i是质数。将其所有的倍数(除了它本身)标记为非质数,即将is_prime[j]置为false,其中j=ii, i(i+1), i*(i+2), ... 直到i*j > N。
统计is_prime中true的个数,即为{1,2,3,...,N}中质数的个数。
以下是Python代码实现:
- def count_primes(n):
- is_prime = [True] * (n+1)
- count = 0
- for i in range(2, n+1):
- if is_prime[i]:
- count += 1
- j = i * i
- while j <= n:
- is_prime[j] = False
- j += i
- return count
复制代码 时间复杂度为O(N*log(logN))。 |
|