很久没有记录什么了,但是最近又没有什么值得记录的,想copy过来的又介于非技术,想写又不好写的也不便写在这里。
前次遇到一个素数的问题,一直也想问问大家有没什么好的想法:计算从2到100000素数的个数,当然记录所有素数更好。希望用尽量少的内存和尽可能快的方法。
1.定义
根据素数定义,从2到100000遍历所有数字,每个数字根据定义判断是否素数。
2.筛选
先筛选掉所有的2的倍数(2倍),然后对剩余的数筛选3的倍数(2倍),从左至右依次遍历筛选。
3.猜测(由于自己找不到证明,所以只能算猜测)
素数是不能被素数整除的,虽然并不是不能被素数整除的数就是素数,但是,我们列举一些数就会发现,每个素数是不能被他之前的素数整除的,只需判断该数不能被他之前的素数整除即可。
另外,任何一个数必定有比他的平方根小的因子,所以,可以只用判断到平方根以前的素数就够了(不过,因为求平方根比较毫时,这里实际也不必采用;同样,用前面的素数的平方比较也是不必的,乘法代价较这种遍历量小的情况实际更昂贵)。