三种求素数/质数的方法

138 阅读1分钟

求质数/素数

素数的定义:>1的只能被0和自身整数的数。

我们拿下面这道求素数模板题举例,介绍三种求素数的方法:

868. 筛质数 - AcWing题库

暴力 也叫试除筛法

数学.jpg 12/4=312/4=3 ,3和4就是12的因数,因数都是成对出现的。可以表示为:d1,d2d1,d2。因此可以得出公式:

d2=n/d1d2=n/d1

又因为 3<43<4。 所以得出d2<=d1d2<=d1

我们也可以表示为:

d2<=n/d2d2<=n/d2

延申为: d2<=nd^2<=n

d<=nd<= √n

因此我们求素数的时候就可以不枚举到n本身,可以枚举到 n√n即可,或者 n/dn/d即可:

image.png

时间复杂度:遍历一遍数组O(n),判断是否是素数O(√n),总共O(n√n)

埃氏筛法

删掉2的倍数,3的倍数,5的倍数,剩下的就是质数。

image.png

证明

image.png

code

image.png

时间复杂度: n/2+n/3+n/n=n(1/2+1/3++1/n)n/2+n/3+n/n=n(1/2+1/3+……+1/n) =nlongn =nlong^n

线性筛法