SPOJ VLATTICE Visible Lattice Points[莫比乌斯反演]
来源:互联网 发布:java的工作内容是什么 编辑:程序博客网 时间:2024/04/29 08:44
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)。
那么最后
最后将这三种情况加起来,就是我们要的结果了。
#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[N];int prim[N],mu[N],smu[N];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;}
阅读全文
0 0
- SPOJ VLATTICE - Visible Lattice Points 莫比乌斯反演
- 【莫比乌斯反演】[SPOJ-VLATTICE]Visible Lattice Points
- 【莫比乌斯反演】[SPOJ VLATTICE]Visible Lattice Points
- SPOJ VLATTICE Visible Lattice Points - 莫比乌斯反演
- SPOJ VLATTICE Visible Lattice Points[莫比乌斯反演]
- [SPOJ VLATTICE]Visible Lattice Points 数论 莫比乌斯反演
- SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演基础题)
- SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演)
- 【SPOJ VLATTICE】Visible Lattice Points——莫比乌斯反演3
- SPOJ 7001 VLATTICE - Visible Lattice Points(莫比乌斯反演)
- SPOJ VLATTICE Visible Lattice Points(莫比乌斯反演入门)
- SPOJ VLATTICE Visible Lattice Points 莫比乌兹反演入门题
- SPOJ - VLATTICE Visible Lattice Points(gcd(x,y,z)=1的对数/莫比乌斯反演)
- SPOJ VLATTICE Visible Lattice Points 初入莫比乌斯
- spoj 7001. Visible Lattice Points(莫比乌斯反演)
- SPOJ 7001. Visible Lattice Points (莫比乌斯反演)
- SPOJ 7001 Visible Lattice Points (莫比乌斯反演)
- SPOJ 7001. Visible Lattice Points 莫比乌斯反演
- Android NDK 运行错误:java.lang.UnsatisfiedLinkError: Couldn't load XXX indLibrary returned null
- 基于GraphCuts图割算法的图像分割----OpenCV代码与实现
- c语言判断机器大小端
- HDU 1081 DP找最大和的矩阵
- 第一篇博客
- SPOJ VLATTICE Visible Lattice Points[莫比乌斯反演]
- mysql存储过程的学习(mysql提高执行效率之进阶过程)
- pycharm 每日提示
- HTML基础学习笔记
- 易九通生物科技是不是非法集资?会不会跑路呢?hk8691
- 自然语言处理学习(二):标签问题和隐马尔科夫模型2.4-2.7
- centos 配置 docker
- mysql如何添加一个表的外键
- 解决PKIX:unable to find valid certification path to requested target 的问题