判断素数的方法有以下几种:
方法一: 暴力,官方叫试除法
1)根据素数的定义给定一个数n,i从2开始取值知道n-1,若n%i != 0,那么n即为素数。进一步思考——有必要遍历到n-1吗?
我们知道,除了1以外,任何合数最小的因子是2,那么最大的因子就是n/2,所以遍历到n/2就足够了。
int n;
if(n==1 || n==0) printf("0");
for(int i=2;i<=n/2;i++){
if(n%i==0){
printf("0");
return 0;
}
}
printf("1");
2)在以上的基础上,有数学证明表明只需遍历到 n \sqrt{n} n即可 ,具体证明可百度,不赘述,代码类似上面的
筛——普通筛和线性筛
1)普通筛——埃拉托斯特尼(Eratosthenes)筛法(时间复杂度 nln(ln n) )
简单来讲,就是把不大于 n \sqrt{n} n