1. 程式人生 > >素數篩

素數篩

i++ 素數 get 質因數 rime ems oid 否則 1-1

今天突然想到一種另一種理解素數篩的角度

對於每個數的質因數分解是 x=p1^a1 * p2^a2 * pk^ak

對於一個合數來說

1. k=1,a1>1

2.k>1,a1>=1

那麽對於第一種情況,x=p1^a1 只會被 p1^(a1-1)篩去,對於第二種情況,若a1=1,那麽會被p2^a2 * pk^ak篩去,否則只會被p1^(a1-1) * p2^a2 * pk^ak篩去

說了半天跟沒說一樣= =,貼下bin神的代碼

void getprime()
{
    memset(prime,0,sizeof prime);
    for(int i=2;i<=maxn;i++)
    {
        if(!prime[i]) prime[++prime[0]]=i;
        for(int j=1;j<=prime[0]&&prime[j]<=maxn/i;j++)
        {
            prime[prime[j]*i]=1;
            if(i%prime[j]==0)break;
        }
    }
}

素數篩