首先,
质数的定义
质数(Prime Number)是指一个大于 1 的自然数,除了 1 和它自身外,不能被其他自然数整除的数。
质数判定的方法
方法1
从小到大枚举每一个数是否能被整除
bool isprime(int a){
if(a<2)
return 0;
for(int i=2;i<a;i++)
if(a%i==0)return 0;
return 1;
}
方法2
优化,如果x是a的约数,那也是a的约数。对于(x,
),只考虑一个。so
bool isprime(int a){
if(a<2)
return 0;
for(int i=2;i*i<a;i++)
if(a%i)return 0;
return 1;
}
方法3
埃氏筛法(Sieve of Eratosthenes)
void iaprime(int n) {
memset(a,1,sizeof(a));
for (int p = 2; p * p <= n; p++) {
if (a[p]) {
for (int i = p * p; i <= n; i += p) {
a[i] = false;
}
}
}
for (int p = 2; p <= n; p++) {
if (a[p]) {
cout << p << " ";
}
}
}
这段代码的基本思想是:从 2 开始,将每个质数的倍数标记为非质数,最终剩下的未被标记的数就是质数。