Problem
假设可以不考虑计算机运行资源(如内存)的限制,以下 python3 代码的预期运行结果是:【此题仅一个正确选项】
import math
def sieve(size):
sieve = [True] * size
sieve[0] = False
sieve[1] = False
for i in range(2, int(math.sqrt(size)) + 1):
k = i * 2
while k < size:
sieve[k] = False
k += i
return sum(1 for x in sieve if x)
print(sieve(100000000000))
最近参加了创新工场暑期训练营的笔试,然后这道题目的解题思路很新颖,当时没做出来,我这里把我现在的解法写出来,如果直接运行程序的话,一般的电脑算不出来,然后这个测试是可以查阅资料的,代码主要是找1000亿以内的质数,所以用搜索引擎就对了,我感觉没有啥高效的算法能够短时间求解的。
画红色方框的就是答案了。
参考文献
[1].How Many Primes Are There?.https://primes.utm.edu/howmany.html
[2].Sieve of Eratosthenes.https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
[3].试题让电脑崩溃?感受下 DEECAMP 笔试的设计思路.http://www.anyv.net/index.php/article-2216990