題意
給定解法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...