题目概述:
Description:Count the number of prime numbers less than a non-negative number, n.
解题方法:
题意是给出n中所有素数的个数。
首先你需要知道判断一个数是不是素数的方法:(最笨方法但有效)
更多数学方面关于素数判断问题,参考博客:算法总结:判断一个数是否为素数
最初想法是通过两层循环依次判断n个数里素数个数,但代码显然会TLE。当n=499979时就Time Limit Exceeded,超时代码如下:
后来找到一种方法,只能说是Perfect。它叫做Sieve of Eratosthenes(埃拉托色尼筛法,简称埃氏筛法),参考维基百科:Sieve of Eratosthenes
它的思想是通过建立一个bool型数组,从2开始计数,其倍数的数字都赋值为true,显然不是素数。最后统计false的个数即为素数个数。
我的代码:
类似题目:
Ugly Number
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it includes another prime factor 7.
Note that 1 is typically treated as an ugly number.
题意:就是子数由2、3、5组成的数字即为Ugly数字,6=2*3、8=2*2*2。
该方法真的好友技巧啊!只能说算法真是博大精深,同时最近360的笔试题目也考到了一个数字由两个素数组成并打印成5*3的图形题目。所以还是挺重要的知识。2015年的文章,希望您喜欢。