数论——素数
Posted zaq19970105
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数论——素数相关的知识,希望对你有一定的参考价值。
转自:http://www.cnblogs.com/linyujun/p/5198832.html
整合:https://blog.csdn.net/x_i_y_u_e/article/details/46365549
素数
定义
除了1和它本身以外不再有其他的因数的数。也叫质数。
素数判定
根据素数的定义判定(复杂度$O(\\sqrt{n})$)
代码如下
1 //素数 2 inline bool isPrime(const LL x) { 3 if (x <= 1)return false; 4 for (LL i = 2; i * i <= x; i++)if (x % i == 0)return false; 5 return true; 6 }
埃拉托斯特尼筛法
原理:如果找到一个质数,那么这个质数的倍数都不是质数。
这个方法能在 $O(n \\ln \\ln n)$ 的时间复杂度内筛选出 1~n 中的所有素数。示例图如下:
代码如下
1 bool primes[maxN]; 2 inline void Eratosthenes(){ 3 For(i, 2, maxN) primes[i] = true;//先全部初始化为质数 4 For(i, 2, maxN) { 5 if(primes[i]){//如果i是质数 6 for(int j = 2 * i; j < maxN; j += i){//从i的两倍开始的所有倍数 7 primes[j] = false; 8 } 9 } 10 } 11 }
以上是关于数论——素数的主要内容,如果未能解决你的问题,请参考以下文章