51nod 1244 莫比烏斯函式之和 杜教篩

2022-05-24 23:21:11 字數 1442 閱讀 1494

莫比烏斯函式,由德國數學家和天文學家莫比烏斯提出。梅滕斯(mertens)首先使用μ(n)(miu(n))作為莫比烏斯函式的記號。具體定義如下:

如果乙個數包含平方因子,那麼miu(n) = 0。例如:miu(4), miu(12), miu(18) = 0。

如果乙個數不包含平方因子,並且有k個不同的質因子,那麼miu(n) = (-1)^k。例如:miu(2), miu(3), miu(30) = -1,miu(1), miu(6), miu(10) = 1。

給出乙個區間[a,b],s(a,b) = miu(a) + miu(a + 1) + … miu(b)。

例如:s(3, 10) = miu(3) + miu(4) + miu(5) + miu(6) + miu(7) + miu(8) + miu(9) + miu(10)

= -1 + 0 + -1 + 1 + -1 + 0 + 0 + 1 = -1。

輸入包括兩個數a, b,中間用空格分隔(2 <= a <= b <= 10^10)

輸出s(a, b)。

3 10

-1杜教篩板子,佬下午講了我就寫一寫

考慮令h=μ∗i

顯然h=∑d∣nμ(d)∗i(nd)=[n=1]

現在求一下h的字首和sumh(n)=∑i=1nh(i)=1

那麼同時我們考慮sumh(n)=∑i=1n∑d∣nμ(d)∗i(nd)

sumh(n)=∑i=1n∑d∣nμ(d)

sumh(n)=∑d=1n∑i=1⌊nd⌋μ(d)

sumh(n)=∑d=1n∑i=1n[i≤⌊nd⌋]μ(d)

sumh(n)=∑i=1n∑d=1n[d≤⌊ni⌋]μ(d)

sumh(n)=∑i=1n∑d=1⌊ni⌋μ(d)

sumh(n)=∑d=1nμ(d)+∑i=2n∑d=1⌊ni⌋μ(d)

令p(n)=∑d=1μ(d)

可以得到sumh(n)=1=p(n)+∑i=2np(⌊ni⌋)

然後就可以得到最後的式子p(n)=1−∑i=2np(⌊ni⌋)

至於杜教篩的複雜度我就不說了

然後這題需要預處理一部分的字首和來優化,然後就可以了

然後因為我很懶,就不想寫hash table,然後就map代替了

問題不大

1 #include2

using

namespace

std;

3#define n 5000010

4#define ll long long

5 mapmp;

6 ll mu[n],pri[n],vis[n],tot=0;7

void

init()16}

17for(int i=2;i1

];18}19

ll mertens(ll n)

27return mp[n]=ans;28}

29int

main()

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...