首先介绍以下素数的定义
素数,也称为质数,其只能被1或者自身整除的自然数(不包括1)。换而言之,只有两个正因数的自然数称为素数。
与之相对的比1大但不是素数的自然数称为合数。1和0既不是素数也不是合数,合数由若干个质数相乘得到。
基础方法:
显然根据定义就能判断一个数N是否为素数,具体的,对其从2到sqrt(N)进行除法,判断是否存在余数为0的情况,存在即认为N为合数,否则即为素数(这里临界的根号N是因为,对于N=p×q,显然p和q至少有一个小于根号N)。
bool prime(int n){
int i = 0, j = 0;
if (n < 2) return 0;
for (i = 2; i <= sqrt(n); i++) {
if (n%i == 0)
return 0;
}
return 1;
}
埃氏筛:
埃拉托斯特尼筛法,简称埃氏晒,是一种用来求自然数n以内的全部素数。
他的基本原理是,如果我们要获得小于n的所有素数,那就把不大于根号n的所有素数的倍数剔除。
埃氏晒的原理很容易理解,一个合数,必然可以表示成,一个自然数 i 和一个素数的乘积。因此我们找到一个素数后,把他小于n的倍数全部标记为合数,这就是我们要做的