1、素数的判断 O(sqrt(n))
bool isprime(int n) { if (n <= 0) return false; int sqr = (int)sqrt(1.0 * n); for (int i = 2; i <= sqr; i++) { if (n % i == 0) return false; } return true; }
2、素数表的获取
暴力筛 O(n√n)
const int maxn = 101; int prime[maxn], pnum = 0; bool p[maxn] = { false }; void findPrime() { for (int i = 1; i < maxn; i++) { if (isprime(i)) { prime[pnum++] = i; p[i] = true; } } }
埃氏筛法 O(nloglogn)
const int maxn = 101; int prime[maxn], pnum = 0; bool p[maxn] = { false }; void findPrime() { for (int i = 2; i < maxn; i++) { if (!p[i]) { prime[pnum++] = i; for (int j = i + i; j < maxn; j++) { p[i] = true; } } } }