给定一个n*n*n的立方体(中心点为原点O),选择尽量多的点,使得对于任意两点A,B,B不在线段OA上。

可以发现,原问题可转化为三维坐标下的点(x,y,z)中有多少个点的gcd(x,y,z)=1。

这道题我一开始想用欧拉函数做,但我发现需要求出1-n中与每个整数x互质的数的个数,于是试图修改一下欧拉函数的公式,结果发现计算出来的结果存在微小的偏差,原因是n不一定能被x的所有因子整除,使得(n/p)*(n/q)≠n/pq。被逼无奈,于是学了莫比乌斯反演。

莫比乌斯反演的做法是:令$n=n/2$,在$1\leqslant x,y,z\leqslant n$的限制条件下,设$f(X)$为$gcd(x,y,z)=X$的点的个数,$F(X)$为$gcd(x,y,z)=kX$的点的个数,则$F(X)=\sum\limits_{X|d}f(d)$,根据莫比乌斯反演定理则有$f(X)=\sum \limits_{X|d}\mu (\frac{d}{X})F(d)$,$f(1)$即为$x,y,z$均大于0情况下的答案。由于又有$F(X)=\left \lfloor \frac{n}{X} \right \rfloor^3$,因此可以在$O(n)$的时间内算出$f(X)$。

然后用同样的方法可以算出$x,y,z$中有一个为0,另外两个大于0情况下的答案,将$F(X)$换为$\left \lfloor \frac{n}{X} \right \rfloor^2$即可。

一共有8个卦限,坐标平面上的12个象限,将结果乘一乘加一加,再加上在坐标轴上的6种情况,就得到答案了。

 #include<bits/stdc++.h>

 using namespace std;
typedef long long ll;
const ll N=1e5+;
ll n,mu[N],d[N],c[N],ka;
void init() {
mu[]=;
for(ll i=; i<N; ++i)if(mu[i])
for(ll j=i*; j<N; j+=i)mu[j]-=mu[i];
}
ll F1(ll x) {return (n/x)*(n/x)*(n/x);}
ll F2(ll x) {return (n/x)*(n/x);}
ll f(ll x,ll F(ll)) {
ll ret=;
for(ll i=x; i<=n; i+=x)ret+=F(i)*mu[i/x];
return ret;
} int main() {
init();
while(scanf("%lld",&n)&&n) {
n/=;
printf("Crystal %lld: %lld\n",++ka,f(,F1)*+f(,F2)*+);
}
return ;
}

还可以进一步优化,利用整除分块的方法,将复杂度降到$O(\sqrt n)$

 #include<bits/stdc++.h>

 using namespace std;
typedef long long ll;
const ll N=1e5+;
ll n,mu[N],smu[N],ka,ans;
void init() {
mu[]=;
for(ll i=; i<N; ++i)if(mu[i])
for(ll j=i*; j<N; j+=i)mu[j]-=mu[i];
for(ll i=; i<N; ++i)smu[i]=smu[i-]+mu[i];
} int main() {
init();
while(scanf("%lld",&n)&&n) {
n/=;
ans=;
for(ll l=,r; l<=n; l=r+) {
ll t=n/l;
r=n/t;
ans+=(t*t*t*+t*t*)*(smu[r]-smu[l-]);
}
ans+=;
printf("Crystal %lld: %lld\n",++ka,ans);
}
return ;
}

以上筛莫比乌斯函数的方法复杂度是$O(nlogn)$的,也可以换成复杂度更低的$O(n)$的线性筛法,只是代码略长,不再赘述了。

UVA - 11014 Make a Crystal (莫比乌斯反演)的更多相关文章

  1. UVA 11014 - Make a Crystal(容斥原理)

    UVA 11014 - Make a Crystal 题目链接 题意:给定一个NxNxN的正方体,求出最多能选几个整数点.使得随意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, ...

  2. UVa 11014 (莫比乌斯反演) Make a Crystal

    这个题是根据某个二维平面的题改编过来的. 首先把问题转化一下, 就是你站在原点(0, 0, 0)能看到多少格点. 答案分为三个部分: 八个象限里的格点,即 gcd(x, y, z) = 1,且xyz均 ...

  3. UVa 10214 (莫比乌斯反演 or 欧拉函数) Trees in a Wood.

    题意: 这道题和POJ 3090很相似,求|x|≤a,|y|≤b 中站在原点可见的整点的个数K,所有的整点个数为N(除去原点),求K/N 分析: 坐标轴上有四个可见的点,因为每个象限可见的点数都是一样 ...

  4. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  5. HDU 1695 GCD (莫比乌斯反演)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. HDU 1695 GCD (莫比乌斯反演模板)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  8. hdu 1965 (莫比乌斯函数 莫比乌斯反演)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. hdu1695(容斥 or 莫比乌斯反演)

    刚开始看题,想了一会想到了一种容斥的做法.复杂度O( n(3/2) )但是因为题目上说有3000组测试数据,然后吓尿.完全不敢写. 然后想别的方法. 唉,最近精神有点问题,昨天从打完bc开始想到1点多 ...

随机推荐

  1. 字符编码 and 字节和字符串转换(待补充)

    ascii用一个字节(8位二进制)代表一个字符 Unicode常用2个字节(16位二进制)代表一个字符,生僻字需要用四个字节 汉字中已经超出了ASCII编码的范围,用Unicode, Unicode兼 ...

  2. [笔记] Access Control Lists (ACL) 学习笔记汇总

    一直不太明白Windows的ACL是怎么回事,还是静下心来看一手的MSDN吧. [翻译] Access Control Lists [翻译] How Access Check Works Modify ...

  3. Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录认证及退出)解决方案

    最近的项目中涉及到了应用ajax请求后台系统登录,身份认证失败,经过不断的调试终于找到解决方案. 应用场景: 项目测试环境:前端应用HTML,js,jQuery ajax请求,部署在Apache服务器 ...

  4. 主攻ASP.NET.4.5.1 MVC5.0之重生:在项目中使用zTree jQuery 树插件

    效果图和json格式 Controllers代码 using HR.Models; using HR.Models.Repository; /***************************** ...

  5. SOA 面向服务架构 阅读笔记(二)

    SOA并不能保证企业的员工更加轻松,企业的收益更加客观. 6.软件组件 6.1  组件和组件的作用  通过可重用的软件代码-组件,可以构建灵活的软件. 6.2  软件组件又称为应用程序,程序,函数,模 ...

  6. FullPage.js全屏滚动插件

    一.介绍 fullPage.js是一个基于jQuery的插件,他能够很方便.很轻松的制作出全屏网站,主要功能有: 1.支持鼠标滚动 2.多个回调函数 3.支持手机.平板触摸事件 4.支持CSS3动画 ...

  7. 20145240 《Java程序设计》第四次实验报告

    20145240 <Java程序设计>第四次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.26 实验 ...

  8. Deep Learning概述

    1.深度学习发展简史 2.三步实现深度学习 2.1Neural Network 神经网络由模仿脑部神经系统发展而来,一个节点称为一个“Neuron”,包括连接在节点上面的weights和biases. ...

  9. Classloader机制

    1.概述? 类加载器:负责.class文件加载到内存中,并为之生成对应的Class对象,也就是字节码对象.这样就可以使用这个类中的成员变量和方法了.而被加载到内存中的class文件就会变成class对 ...

  10. STAR manual

    来源:STARmanual.pdf 来源:Calling variants in RNAseq PART0 准备工作 #STAR 安装前的依赖的工具 #Red Hat, CentOS, Fedora. ...