筛选素数

来源:互联网 发布:西安软件新城2016 编辑:程序博客网 时间:2024/04/26 03:15

一般筛选素数是判断这个数是否存在除了1和本身外的其他约数,但是对于大数的时候就不适合使用了。

筛选素数的过程:质数的倍数的都需要被除去

const int V=10000;int a[V],prime[V],j=0;// j记录的是素数的个数void get_prime(){    //a[i]为0则i为素数    memset(a,0,sizeof(a));    for(int i=2; i*i < V; i++ )    {        if(!a[i]) // 如果a[i]为0的话        {            prime[j++]=i; // 将所有的素数放在prime数组中            for(int k=i*i; k < V; k+=i)                a[k]=1; // 剔除(筛选)素数的倍数        }    }}

  for(int k=i*i; k < V; k+=i)
                a[k]=1; // 剔除(筛选)素数的倍数

为什么从k=i*i开始呢?
比如 i = 5; k=25开始;之前的 10(2*5) 15(3*5) 20(2*10)已经被剔除了
所以不必再次剔除了

0 0
原创粉丝点击