一类问题: 判定一个整数n(n>1)是否为素数。
算法1:
直接根据素数的定义枚举i
从2到(n−1),如果n%i==0n为合数。
时间复杂度:O(n)
**
bool is_prime(int n) {
int i;
for(i = 2; i < n; i++)
if(n % i == 0) return false;
return true;
}
**
算法2:
大部分人都知道的比较快的方法:判断从2到sqrt(n)是否存在其约数,
时间复杂度O(sqrt(n))
bool is_prime(int n) {
int i;
for(i = 2; i * i <= n; i++)
if(n % i == 0) return false;
return true;
算法3:
高配版:判断2之后,就可以判断从3到sqrt(n)之间的奇数了,无需再判断之间的偶数,时间复杂度O(sqrt(n)/2)
void makePrimes(int primes[], int num)