素数筛

void shai(int n)
{
    int i,j,cnt;
    cnt = 0;
    memset(su,0,sizeof(su));
    memset(prime, true, sizeof(prime));
    prime[1] = prime[0] = false;
    for(i = 2; i <= n; ++i) {
        //cout << prime[i] << endl << endl;
        if(prime[i])
            su[cnt++] = i;
        for(j = 0; j < cnt && su[j]*i <= n; ++j){
            prime[su[j]*i] = false;
            if(i%su[j] == 0)
                break;
        }
    }
    //for(i=0 ; i<cnt; ++i)
      //  printf("%d
",su[i]);
    return ;
}

  

其实优化就在  i%su[j] == 0这上面

首先  任何数都是由若干个质因子构成的,假如

原文地址:https://www.cnblogs.com/mltang/p/8584856.html