題目大意:求[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^}) $(這個好像被叫做杜教篩)。
#includeusingnamespace
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...