SPOJ VLATTICE Visible Lattice Points[莫比乌斯反演]
2017-08-21 16:49
369 查看
A - Visible Lattice Points
SPOJ - VLATTICE 题意:
存在一个N*N*N的正方体,你从(0,0,0)点开始看过去,能看到多少个点。
题解:
结果是三种情况的求和。
① 当 x,y,z 其中两个为0,另外一个为非0的情况 那么我们可以看到 (1,0,0) (0,1,0) (0,0,1)
② 当 x,y,z 其中一个为0,另外两个为非0的情况,就是转换为二维的情况,并且这样的面有三个。
这种情况的时候 f(d) 为 gcd(x,y)==d || gcd(x,z)==d || gcd(y,z)==d 的情况
F(d)表示满足 gcd(x,y) 的结果是d的倍数
并且F(d)我们可以直接算出来
因为我们的最终结果,只要gcd(x,y)==1 所以我们只需要求f(1)。
乘3是因为一共是三个面。
③当 x,y,z 都非0,那么我们能看到的点就是gcd(x,y,z)==1的点,这时的 f(d) 就代表 gcd(x,y,z)==d 的情况。
F(d)表示满足 gcd(x,y,z) 的结果是d的倍数。
,我们也只需要求f(1)。
那么最后
最后将这三种情况加起来,就是我们要的结果了。
<
b59c
p>
#pragma comment(linker, "/STACK:102400000,102400000") #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<string> #include<algorithm> #include<queue> #include<stack> #include<set> #include<map> #include<vector> using namespace std; typedef long long ll; const int N=1e6+5; bool mark ; int prim ,mu ,smu ; int cnt; void initial() { mu[1]=smu[1]=1; cnt=0; for (int i=2 ; i<N ; ++i) { if (!mark[i]) { prim[cnt++]=i; mu[i]=-1; } for (int j=0 ; j<cnt && i*prim[j]<N ; ++j) { mark[i*prim[j]]=1; if (!(i%prim[j])) { mu[i*prim[j]]=0; break; } mu[i*prim[j]]=-mu[i]; } smu[i]=smu[i-1]+mu[i]; } } int main() { initial(); int T; scanf("%d",&T); while (T--) { int n; scanf("%d",&n); ll ans=3; for (int i=1,ed=0 ; i<=n ; i=ed+1) { ed=n/(n/i); ans+=(ll)(smu[ed]-smu[i-1])*(n/i)*(n/i)*(n/i); ans+=(ll)(smu[ed]-smu[i-1])*(n/i)*(n/i)*3; } printf("%lld\n",ans); } return 0; }
相关文章推荐
- 【莫比乌斯反演】[SPOJ-VLATTICE]Visible Lattice Points
- SPOJ VLATTICE - Visible Lattice Points 莫比乌斯反演
- 【SPOJ VLATTICE】Visible Lattice Points——莫比乌斯反演3
- 【莫比乌斯反演】[SPOJ VLATTICE]Visible Lattice Points
- SPOJ VLATTICE - Visible Lattice Points 莫比乌斯反演
- [SPOJ VLATTICE]Visible Lattice Points 数论 莫比乌斯反演
- SPOJ VLATTICE Visible Lattice Points 莫比乌斯反演 难度:3
- A - Visible Lattice Points SPOJ - VLATTICE 容斥原理/莫比乌斯反演
- SPOJ 7001 Visible Lattice Points (莫比乌斯反演+分块)
- SPOJ 7001 VLATTICE - Visible Lattice Points(莫比乌斯反演)
- SPOJ - VLATTICE Visible Lattice Points(gcd(x,y,z)=1的对数/莫比乌斯反演)
- SPOJ - VLATTICE Visible Lattice Points (莫比乌斯反演)
- spoj 7001 VLATTICE - Visible Lattice Points(莫比乌斯反演)
- VLATTICE - Visible Lattice Points [Spoj 7001]
- SPOJ VLATTICE Visible Lattice Points(莫比乌斯反演入门)
- SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演基础题)
- SPOJ1007 VLATTICE - Visible Lattice Points
- SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演基础题)
- SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演)
- SPOJ VLATTICE Visible Lattice Points - 莫比乌斯反演