51nod 1244 莫比烏斯函式之和

2022-09-18 01:51:31 字數 940 閱讀 4274

題目大意:求[a,b]之間內的莫比烏斯函式μ之和。($a,b<=10^$)

思路:令$ m(n)=\sum_^\mu (i)  $,題目所求即為$ m(b)-m(a-1) $。

由於$ \sum_ \mu (d)=\left [ n=1 \right ] $ ,所以$ \sum_^ \sum_ \mu (d)=1 $

令$ i=kd $,則有$ \sum_^ \sum_ \mu (d)= \sum_^ \sum_^ \mu (d) = \sum_^ m(\left \lfloor n/k \right \rfloor) =1 $

那麼$ m(n)=1-\sum_^ m(\left \lfloor n/i \right \rfloor) $

由於$ \left \lfloor n/i \right \rfloor $的取值只有$ o(\sqrt) $種,預處理出前$ n^} $的$ m(n) $,然後記憶化搜尋,可以證明總時間複雜度為$ o(n^}) $(這個好像被叫做杜教篩)。

#includeusing

namespace

std;

#define ll long long

#define mn 6000000

#define mp 413000

#define mod 5999993

struct edge*h[mod];

int u[mn+5],p[mp+5

],pn;

bool f[mn+5

];int

cal(ll x)

;h[x%mod]=np;

for(ll i=2,ls;i<=x;i=ls+1)ls=x/(x/i),np->u-=(ls-i+1)*cal(x/i);

return np->u;

}int

main()

cout

<1

);}

51nod1244 莫比烏斯函式之和

求 i lr i l,r 10 10設m n i 1 n i 我們知道,d n d n 1 那麼1 i 1 n d i d t 1n d t d i 1n d 1 ni d i 1 nm ni 於是,m n 1 i 2nm ni 後面的東西可以用分塊來加速。然後打上記憶化標記。或者可以先預處理出一段...

51NOD 1244 莫比烏斯函式之和

基準時間限制 3 秒 空間限制 131072 kb 分值 320 難度 7級演算法題 莫比烏斯函式,由德國數學家和天文學家莫比烏斯提出。梅滕斯 mertens 首先使用 n miu n 作為莫比烏斯函式的記號。具體定義如下 如果乙個數包含平方因子,那麼miu n 0。例如 miu 4 miu 12 ...

51nod 1244 莫比烏斯函式之和

莫比烏斯函式,由德國數學家和天文學家莫比烏斯提出。梅滕斯 mertens 首先使用 n miu n 作為莫比烏斯函式的記號。具體定義如下 如果乙個數包含平方因子,那麼miu n 0。例如 miu 4 miu 12 miu 18 0。如果乙個數不包含平方因子,並且有k個不同的質因子,那麼miu n 1...