[莫比乌斯反演] CCPC 2016 Hangzhou J & HDU 5942 Just a Math Problem
2017-03-30 07:59
447 查看
记f(k)表示k的素因子个数,g(k)=2f(k)。
求g(1)+…+g(n)。
n≤1012
g(k)的组合意义为满足(i,j)=1且ij=k的对数。
所以变成求(i,j)=1且ij≤n的对数。
∑ij≤n[(i,j)=1]===∑ij≤n∑d|i d|jμ(d)∑d=1n√μ(d)∑ij≤⌊nd2⌋1∑d=1n√μ(d)∑i=1⌊nd2⌋⌊nd2i⌋
复杂度O(n√lnn)
求g(1)+…+g(n)。
n≤1012
g(k)的组合意义为满足(i,j)=1且ij=k的对数。
所以变成求(i,j)=1且ij≤n的对数。
∑ij≤n[(i,j)=1]===∑ij≤n∑d|i d|jμ(d)∑d=1n√μ(d)∑ij≤⌊nd2⌋1∑d=1n√μ(d)∑i=1⌊nd2⌋⌊nd2i⌋
复杂度O(n√lnn)
#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; typedef long long ll; const int maxn=1000000; const int P=1e9+7; int prime[maxn+5],vst[maxn+5],num; int miu[maxn+5]; inline void Pre(int n){ miu[1]=1; for (int i=2;i<=n;i++){ if (!vst[i]) prime[++num]=i,miu[i]=-1; for (int j=1;j<=num && (ll)i*prime[j]<=n;j++){ vst[i*prime[j]]=1; if (i%prime[j]==0){ miu[i*prime[j]]=0; break; } miu[i*prime[j]]=-miu[i]; } } } inline ll calc(ll n){ ll ret=0; ll l,r; for (l=1;l*l<=n;l++) ret+=n/l; for (ll t=n/l;l<=n;l=r+1,t--) r=n/t,ret+=(r-l+1)*t%P; return ret%P; } inline ll Solve(ll n){ ll ret=0; for (int i=1;(ll)i*i<=n;i++) if (miu[i]) ret+=miu[i]==1?calc(n/i/i):P-calc(n/i/i); return ret%P; } int main(){ int T,Case=0; ll n; freopen("t.in","r",stdin); freopen("t.out","w",stdout); scanf("%d",&T); Pre(maxn); while (T--){ scanf("%I64d",&n); printf("Case #%d: %I64d\n",++Case,Solve(n)); } return 0; }
相关文章推荐
- HDU 5942 && 2016CCPC杭州 J: Just a Math Problem(莫比乌斯函数)
- HDU 5942 Just a Math Problem(莫比乌斯)
- hdu5942 Just a Math Problem
- HDU 5832——A water problem & 2016CCPC网络赛1001
- [DP] CCPC 2016 Hangzhou I & HDU 5941 Inequality
- HDU 5974 && 2016ICPC大连 D: A Simple Math Problem
- hdu 5803 Zhu’s Math Problem (2016多校第六场1011)数位dp
- HDU 5943 && 2016CCPC杭州 K: Kingdom of Obsession(二分匹配)
- HDU 5937 && 2016CCPC杭州 E: Equation(DFS)
- HDU-5832-A water problem【2016CCPC网络赛】
- HDU 5935 && 2016CCPC杭州 C: Car
- 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&amp;&amp;bzoj 2820 YY的GCD&amp;&amp;BZOJ 3529 数表)
- HDU Mr. Frog’s Problem 2016CCPC东北地区大学生程序设计竞赛 - 重现赛
- HDU 5933 && 2016CCPC杭州 A: ArcSoft's Office Rearrangement
- HDU 5936 && 2016CCPC杭州 D: Difference(折半枚举)
- HDU 5974 A Simple Math Problem 2016大连区域赛
- 【2016-CCPC-A】水题(A water problem,hdu 5832)
- 【HDU】1757 - A Simple Math Problem(矩阵构造方法 & 快速幂)
- HDU 5938 && 2016CCPC杭州 F: Four Operations
- HDU 5934 && 2016CCPC杭州 B: Bomb(Trajan强连通)