1. 程式人生 > >線性篩莫比烏斯函式

線性篩莫比烏斯函式

莫比烏斯全家桶

ll prime[maxn],mob[maxn],vis[maxn],cnt;

void Mobius(){
    memset(prime,0,sizeof(prime));
    memset(mob,0,sizeof(mob));
    memset(vis,0,sizeof(vis));
    mob[1] = 1;
    cnt = 0;
    for(ll i = 2;i < maxn; i++){
        if(!vis[i]){
            prime[cnt++] = i;
            mob[i] = -1;
        }
        for
(ll j = 0;j < cnt&&i*prime[j] < maxn;j++){ vis[i*prime[j]] = 1; if(i%prime[j]) mob[i*prime[j]] = -mob[i]; else{ mob[i*prime[j]] = 0; break; } } } }