- 数论
- 质数
- 质数的判定----试除法
- 质数
逻辑:若一个正整数N是合数,则存在一个能整除N的数T,其中2<=T<=sqrt(N).
方法:我们只需要扫描2–sqrt(N)之间的所有整数,依次检查它们能否整除N,若都不能整除,则N为质数,否则N为合数。
时间复杂度
O(sqrt(N))
代码实现
bool is_prime(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)return false;
}
return true;
}
- 质数的筛法----Eratosthenes筛法
方法:对于每个数x,我们****只需要从x2 开始,把x2,(x+1)*x,……[N/x]*x标记为合数即可
时间复杂度
O(NloglogN)
代码实现
void gets_prime