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

2021-09-10 14:01:15 字數 2796 閱讀 1280

莫比烏斯函式,由德國數學家和天文學家莫比烏斯提出。梅滕斯(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此題為求出區間 [a,

b]

[a,b]

[a,b

] 之間的莫比烏斯函式之和,顯然 ∑i=

abμ(

i)=∑

i=1b

μ(i)

−∑i=

1aμ(

i)

\sum\limits_^ \mu(i) =\sum\limits_^ \mu(i) - \sum\limits_^ \mu(i)

i=a∑b​

μ(i)

=i=1

∑b​μ

(i)−

i=1∑

a​μ(

i),所以我們只需對 n

nn 求出 ∑i=

1nμ(

i)

\sum\limits_^ \mu(i)

i=1∑n​

μ(i)

即可而莫比烏斯函式 μ

\muμ 我們已知為積性函式,求積性函式的字首和那麼顯然就用杜教篩來求啦

杜教篩的學習可以參考

杜教篩用於在低於線性的時間複雜度內求出一些積性函式的字首和

現在我們需要求出積性函式 μ

\muμ 的字首和,考慮莫比烏斯函式的性質 μ∗i

\mu \ast i = \epsilon

μ∗i=

ϵ ( ∗

\ast

∗ 為狄利克雷卷積)

根據杜教篩的核心式就有

∑ i=

1nμ(

i)=∑

i=1n

(μ(i

)∗i(

i))−

∑i=2

ni(i

)∑j=

1⌊ni

⌋μ(j

)=∑i

=1nϵ

(i)−

∑i=2

ni(i

)∑j=

1⌊ni

⌋μ(j

)\sum\limits_^\mu(i) = \sum\limits_^(\mu(i) \ast i(i))-\sum\limits_^i(i)\sum\limits_^ \rfloor}\mu(j)\\\\ = \sum\limits_^\epsilon(i)-\sum\limits_^i(i)\sum\limits_^ \rfloor}\mu(j)

i=1∑n​

μ(i)

=i=1

∑n​(

μ(i)

∗i(i

))−i

=2∑n

​i(i

)j=1

∑⌊in

​⌋​μ

(j)=

i=1∑

n​ϵ(

i)−i

=2∑n

​i(i

)j=1

∑⌊in

​⌋​μ

(j)顯然其中 ϵ

\epsilon

ϵ 與 i

ii 的字首和很好求,再用整除分塊和記憶化搜尋優化一下就可以了

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

5e6+5;

bool isprime[maxn]

;int tot;

int prime[maxn]

;int mu[maxn]

;ll prefixmu[maxn]

;void

sieve()

for(

int j =

0; j < tot && i * prime[j]

< maxn;

++j)

mu[i * prime[j]]=

-mu[i];}

}for

(int i =

1; i < maxn;

++i) prefixmu[i]

= prefixmu[i -1]

+ mu[i];}

map summu;

ll sigmamu

(ll key)

summu[key]

= ans;

return summu[key];}

ll a, b;

intmain

(int argc,

char

*ar**)

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