欧拉筛(O(n))
此方法试用与求某一范围内质数,或者生成一个质数数组。类似于提前打表,使用时进行O(1)d的查询。埃氏筛法复杂度比欧拉筛要高,所以在这里只记录一个欧拉筛。
void Euler(int N)
{
st[1] = true;
for (int i = 2; i <= N; i++)
{
if (!st[i])
primes[cnt++] = i;
for (int j = 0; primes[j] <= N / i; j++)
{
st[i * primes[j]] = true;
if (i % primes[j] == 0)
break;
}
}
}
试除法(O())
可以处理很大的单一数据,判断其是否时素数。只需判断一次的话可以考虑使用试除法
bool prime(int n)
{
if (n < 2)return false;
for (int i = 2; i <= sqrt(n); i++)
if (n % i == 0)return false;
return true;
}