如何求素数(重点为筛选法)

来源:互联网 发布:手机下载在线视频软件 编辑:程序博客网 时间:2024/06/05 12:42

素数是只能整除它自己和1的整数。

  1. 遍历2以上N的平方根以下的每一个整数,是不是能整除N
  2. 遍历2以上N的平方根以下的每一个素数,是不是能整除N;(这个方法是上面方法的改进,但要求N平方根以下的素数已全部知道)
  3. 筛选法:找出小于等于n的开方的素数,然后将n内所有这些素数的倍数统统去掉,剩下的数就都是素数。即”埃拉托斯特尼筛法”。
#include<cstdio>#include<iostream>#include <cmath>#include<string>#include<set>#include<iterator>#include<cstring>#define N 10001using namespace std;bool prime[101];int main(){    int i,j;    memset(prime,1,sizeof(prime));    prime[0]=prime[1]=0;     //先挖掉a[1]    for(i=2; i*i<=100; i++){     //无需找1~n,只需找1~除数为根n        if(prime[i]){            for(j=2*i; j<101; j+=i){                prime[j]=0;            }        }    }    for(i=2;i<101;i++){        if(prime[i]){            printf("%d ", i);        }    }    return 0;}

4.线性素数筛:每一个合数都可以进行质因数分解,所以任何一个合数都可以由最小素因子进行唯一标记。线性筛中一个数字只被它最小的素因子筛掉,减少了重复删除造成的时间复杂度。

慢慢学,会慢慢补充的~~~