1. 程式人生 > >bzoj 3944: Sum (杜教篩)

bzoj 3944: Sum (杜教篩)

題目描述

傳送門

題目大意:
ans1=ni=1φ(i), ans2=ni=1μ(i)
n<=2311

題解

對於ans1=ni=1φ(i)
我們利用n=d|nφ(d)來進行化簡,φ(i)=nd|i,d<iφ(d)。 設ϕ(n)=ni=1φ(i)
ϕ(n)=ni=1φ(i)=ni=1id|i,d<iφ(d)
=n(n+1)2ni=2d|i,d<iφ(d)=n(n+1)2ni=2nid=1φ(d)
=n(n+1)2ni=2ϕ(ni)

對於上面的式子我們只需要就算nϕ(ni)就可以了。
至於時間複雜度我並不會算,不過網上有不少證明。
如果預處理n

23的字首和的話,時間複雜度可以達到O(n23)

然後再看 ans2=ni=1μ(i)
利用[n=1]=d|nμ(d)進行化簡,設M(n)=ni=1μ(i)

1=ni=1[i=1]=ni=1d|iμ(d)
=ni=1nid=1μ(d)
=ni=1M(ni)

所以M(n)=1n

相關推薦

bzoj 3944: Sum

題目描述 傳送門 題目大意: ans1=∑ni=1φ(i), ans2=∑ni=1μ(i) n<=231−1 題解 對於ans1=∑ni=1φ(i) 我們利用n=∑d|nφ(

bzoj 4176】 Lucas的數論 莫比烏斯反演

amp short last ++ esc output sig blog tro Description 去年的Lucas非常喜歡數論題,但是一年以後的Lucas卻不那麽喜歡了。 在整理以前的試題時,發現了這樣一道題目“求Sigma(f(i)),其中1&l

BZOJ3944: Sum模板

lse -s rim 結合 get 明顯 break space php BZOJ3944: Sum(杜教篩模板) 題面描述 傳送門 題目分析 求\(\sum_{i=1}^{n}\mu(i)\)和\(\sum_{i=1}^{n}\varphi(i)\) 數據範圍線性不可做

HDU 5608

problem There is a function f(x),which is defined on the natural numbers set N,satisfies the following eqaution N2−3N+2=∑d|Nf(d) ca

【BZOJ3512】DZY Loves Math IV

【BZOJ3512】DZY Loves Math IV(杜教篩) 題面 BZOJ 求 \[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\] 其中\(n\le 10^5,m\le 10^9\)。 題解 這個資料範圍很有意思。 \(n\)的值足夠小,所以我們可以直接暴力列舉\(n

【總結】積性函式字首和

前言: 據CCH和LJH說,杜教篩似乎是一個非常套路的東西,幾乎所有的杜教篩的題目推理方式都是一模一樣的(但實測有些推理還是很噁心的)。所以複習杜教篩不需要太多時間,粗略看一遍,留下印象即可。 杜教篩其實是一種簡化運算的推理方式,它的使用條件並不僅限於積

BZOJ 3930 選數莫比烏斯函式+

#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #def

洛谷P3768 簡單的數學題莫比烏斯反演+狄利克雷卷積+

ostream str lar .com 數學 logs tomato define show 傳送門 不會…… 兩篇加在一起都看不懂…… https://www.cnblogs.com/cellular-

BZOJ4916 神犇和蒟蒻尤拉函式+

  第一問是來搞笑的。由尤拉函式的計算公式容易發現φ(i2)=iφ(i)。那麼可以發現φ(n2)*id(n)=Σd*φ(d)*(n/d)=nΣφ(d)=n2 。這樣就有了杜教篩所要求的容易算字首和的兩個函式。一通套路即可。 #include<iostream> #include<c

BZOJ4916 神犇和蒟蒻歐拉函數+

!= fin def names urn 兩個 要求 font zoj   第一問是來搞笑的。由歐拉函數的計算公式容易發現φ(i2)=iφ(i)。那麽可以發現φ(n2)*id(n)=Σd*φ(d)*(n/d)=nΣφ(d)=n2 。這樣就有了杜教篩所要求的容易算前綴和的兩個

【51nod】尤拉函式之和數論,

文章目錄 題目 分析 一個性質 嘗試遞推 分塊 打表 線性篩尤拉函式 一個性質 線性篩 程式碼 題目 12

[BZOJ4652/UOJ#221][NOI2016]迴圈之美莫比烏斯反演+

Address Solution…… 一、 O(nm)O(nm) 我們知道, kk 進位制小數 0.0000000...10000000..10000000..1...0.0000000...10000000..10000000..1... (迴圈

[BZOJ4176]Lucas的數論莫比烏斯反演+

題目描述 傳送門 題解 做約數個數和的時候有一個結論: d(nm)=∑i|n∑j|m[(i,j)=1] 直接套進去 ∑i=1n∑j=1m∑x|i∑y|j[(x,y)=1] 然後根據反演公式

HDU 6439 2018CCPC網路賽 Congruence equationI + 莫比烏斯反演 + 伯努利數

大致題意:給你一個長度為k的序列a。對於序列c,當 時,;當時,取[0,m)中任意一個數字。令 表示滿足 的序列c的方案數。現在讓你求 。 首先,根據裴蜀定理,滿足的條件是,那麼我們不妨分為兩種情況處理。對於的數字,假設他們的gcd為g,那麼剩下的

hdu5608 function (莫比烏斯反演+

題目連結 題意:根據式子 求 想出這題的做法後看了幾個部落格想驗證一下,然而看了四五篇部落格發現博主的做法都和我不一樣...用自己的想法AC後,發現時間比大部分程式碼快,直接到rank2,然後略微優化了一下線性篩預處理部分(理論上預處理到n的2/3次方也就是1e

BZOJ.3944.Sum()

clu markdown down 鏈接 可能 com Go printf href 題目鏈接 又寫個模板題用了半晚上。。 卡常寫法 還非常短。。 //35332 kb 7608 ms //跟Kelin dalao學一波卡常。怎麽還是很慢QAQ //phi[]要long

bzoj 3944 Sum ——

spa while 入門題 long ble algorithm cst col () 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=3944 杜教篩入門題! 看博客:https://www.cnblogs.com/

BZOJ 3944 Sum (積性函式字首和)

#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #def

P4213 【模板】Sum

\(\color{#0066ff}{題 目 描 述}\) 給定一個正整數\(N(N\le2^{31}-1)\) 求 \(\begin{aligned} ans_1=\sum_{i=1}^n\varphi(i) \end{aligned}\) \(\begin{aligned} ans_2=\sum_{

Luogu 4213 【模板】Sum

當作杜教篩的筆記吧。 杜教篩 要求一個積性函式$f(i)$的字首和,現在這個東西並不是很好算,那麼我們考慮讓它捲上另外一個積性函式$g(i)$,使$(f * g)$的字首和變得方便計算,然後再反推出這個$f$函式的字首和。 $$\sum_{i = 1}^{n}(f * g)(i) = \sum_{i =