積性(完全積性)函式字首和,狄利克雷卷積字首和
假設現在求f的字首和:
公式為:
也就是構造h,g使得 h=f*g 其中h的字首和好求 假設我們要求的是f=μ
怎麼構造? 注意到 μ*i=e i(n)=1 e(n)=[n==1] e的字首和好求,所以h=e,e=i
h(n)字首和=1,g(i)=1,帶入上面的公式即可
小規模打表,大規模map記憶化,取模
關鍵點就是卷積哪個函式方便求和
莫比烏斯函式字首和1e10
#include#include #includeusing namespace std;
using namespace std::tr1;
#define ll long long
const int maxn=4600005;
int mu[maxn];
int pri[1000005];
bool isp[maxn];
mapmp;
void init(int n)
else mu[i*pri[j]]=mu[i]*-1;
} mu[i]+=mu[i-1]; }}
ll dfs(ll x)
mp[x]=res;
return res;
}int main()
ll inv(ll t, ll p)
mapmp;
ll inv6;
ll inv2=500000004;
ll get(ll x)
ll dfs(ll x)
return mp[x]=(res%mod);
}int main()
else mu[i*pri[j]]=-mu[i];
} }for(ll i=1;i<=n;i++) }
ll inv(ll t, ll p)
mapmp;
ll inv6;
ll inv2=500000004;
ll get(ll x)
ll dfs(ll x)
return mp[x]=(res%mod);
}int main()
}
習題 杜教篩(Sum)(杜教篩)
傳送門杜教篩的板子,拿來練手 beginans sum phi i end g n 1,phi n f n h n sum phi d g frac n h n sum f d g frac 令f n sum f i h n sum h i beginh n sum h i sum sum f d ...
杜教篩刷題總結
其實只有一道題 2020.01.01update 部落格鍋了非常抱歉,感謝sbskyh tdcp指出 n 很小可以考慮列舉 1 到 n 對於乙個列舉出來的 n 考慮把 n 拆為 x y 其中 x 為 n 的每個質因子的1次方的乘積,y frac s n,m sum limits varphi s n...
模板 杜教篩
杜教篩用來解決積性函式求字首和的問題。複雜度為 o n frac 適用情況 已知函式 f 求 sum f 存在 f g f 且 g,sum g,f,sum f 容易求出。常用公式 mu i n 1 varphi i id 以求 sum mu 為例。mu i n 1 sum i 1 1 1 sum i...