51Nod1239 尤拉函式之和

2021-08-15 14:49:39 字數 1702 閱讀 1023

題意

給定

n ,求ϕ(

n)=∑

ni=1

φ(i)

解法

這道題就要用到一種神奇的黑科技:杜教篩了!

首先來推公式: ∑d

|nφ(

d)=n

···①

由①可知:φ(

n)=n

−∑d|

n,d(d)·

··②

將②帶入到所求的式子中去,有: ϕ(

n)=∑

i=1n

[i−∑

d|i,

d(d)]

=n∗(

n+1)

2−∑i

=2n∑

d|i,

d(d) =n

∗(n+

1)2−

∑i=2

n∑d=

1⌊ni

⌋φ(d

)=n∗

(n+1

)2−∑

i=2n

ϕ(⌊n

i⌋)

然後就只需要不停遞迴下去,就可以達到比較優的複雜度: t

(n)=

o(n‾

√)+∑

n√i=

1t(i

)+t(

ni) ,利用主定理便可得知複雜度為 o

(n34

) 如果能夠預處理出一部分的 ϕ

(n) ,那麼複雜度可以進一步優化,當預處理出前 n

23項,複雜度最優

ps: 有

人問:∑

ni=2

∑d|i

,d(d)=

∑ni=

2∑⌊n

i⌋d=

1φ(d

) 是怎麼得到的,其實很簡單,左邊是乙個乙個列舉 φ

(d) ,而右邊則是算出 d

可以成為多少個數的因子,那麼

d就可以產生那麼多的貢獻

複雜度

o(n2

3 )

**

#include

#include

#include

#include

#define rint register int

#define lint long long int

using

namespace

std;

const

int m=1e9+7;

const

int n=10000010;

const

int m2=500000004;

bool vis[n];

int pri[n/10],cnt;

lint phi[n];

mapint> f;

void prepare()}}

for(int i=1;i1])%m;

}int cal(lint n)

return f[n]=ret;

}int main()

51nod1239 尤拉函式之和

求 i 1n i n 10 10 這道題和莫比烏斯函式一行,都可以通過神奇的推導的出結論。我們設 n i 1n i 眾所周知,d n d n 那麼,n n d n,d d 於是 n i 1n i d i,d d n n n 1 2 i 2n d i d d n n n 1 2 i d 2n d 1 ...

51nod 1239 尤拉函式之和

求 n i 1 i 1 n 10 杜教篩第二道裸題。必要結論 i n i n 證明 設f n i n i 將n分解質因數,n p qii 利用莫比烏斯函式裡學到的乙個性質,可以得到 f n f pq ii f pq qk 0 pk q k 1p k pk 1 1 p q f n n 設s n n i...

51Nod 1239 尤拉函式之和

acm模版 這個題和那個 51nod 1244 莫比烏斯函式之和 的方法幾乎一模一樣,差別就是推導公式的結果不一樣罷了,但是形式是一樣的。推導如下 設 f n i 1 n i 通過尤拉函式的性質我們可以知道 d n d n 所以呢,n n d n,d d f n i 1n i d i,d d f n...