Count Primes
程序员文章站
2024-03-15 12:49:17
...
问题描述:
Count the number of prime numbers less than a non-negative number, n.
Example:
Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.
简述:
给一个非负整数n,计算小于n的质数个数。
解题思路:
质数了解一下:除了1和它自身这两个因数外就再也没有别的因数的数(1不是质数)。
思路1:简单粗暴法,疯狂遍历判断就是了。效率极低,只要提交,必然Time Limit Exceeded。也可能有简单修改,比如将内层循环遍历范围缩小到 或 ,但依旧改变不了它慢的本质。
int countPrimes(int n) {
if(n<=2) return 0;
int num = 1;
for(int i=3; i<n; ++i) {
int j;
for(j=2; j<i; ++j) {
if(i%j == 0)
break;
}
if(j==i)
++num;
}
return num;
}
思路2:广搜。两个因子(>=2)的乘积必然不是质数。利用这一点,通过广搜,可以排除小于n的所有不是质数的数,剩余的即是质数。
int countPrimes(int n) {
if(n<=2) return 0;
bool f[n] = {0};
int num = 0;
f[0] = f[1] = 1;
for(long i=2; i<n; ++i) {
if(!f[i]) ++num;
for(long j=i; j<n; ++j) {
if(i*j < n) {
f[i*j] = 1;
} else {
break;
}
}
}
return num;
}
上一篇: 关于泛型 T