这个题是根据某个二维平面的题改编过来的。

首先把问题转化一下, 就是你站在原点(0, 0, 0)能看到多少格点。

答案分为三个部分:

  1. 八个象限里的格点,即 gcd(x, y, z) = 1,且xyz均不为0. 可以先假设xyz都是整数,然后将所求的答案乘8
  2. 12个四分之一平面中的点,可以先算(x, y, 0)(x > 0, y > 0)这样的点的个数,然后乘12
  3. 坐标轴上距原点距离为1的6个点

三维对应的莫比乌斯公式就是:

在这道题里面就是 X = Y = Z = N / 2

这道题用容斥原理或者欧拉函数也可以做,但是还是莫比乌斯反演最好写最快了。

 #include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL; const int maxn = ;
int prime[maxn + ], mu[maxn + ];
bool vis[maxn + ]; void Mobius()
{
mu[] = ;
int cnt = ;
for(int i = ; i <= maxn; i++)
{
if(!vis[i]) { mu[i] = -; prime[cnt++] = i; }
for(int j = ; j < cnt && (LL)i*prime[j] <= maxn; j++)
{
vis[i * prime[j]] = ;
if(i % prime[j] != ) mu[i*prime[j]] = -mu[i];
else { mu[i*prime[j]] = ; break; }
}
} for(int i = ; i <= maxn; i++) mu[i] += mu[i - ];
} int main()
{
Mobius(); int n, kase = ;
while(scanf("%d", &n) == && n)
{
n /= ;
LL ans = ;
for(int i = , j; i <= n; i = j + )
{
int t = n / i;
j = n / t;
ans += ((LL)t*t*t* + (LL)t*t*) * (mu[j] - mu[i - ]);
}
printf("Crystal %d: %lld\n", ++kase, ans);
} return ;
}

代码君

最新文章

  1. ionic react-native和native开发移动app那个好
  2. 大数据并行计算利器之MPI/OpenMP
  3. linux中django+apache配置
  4. 腾讯内部举报信曝光: HR内斗混乱 玩弄求职者
  5. 【转载】CentOS LVM磁盘扩容
  6. Solr系列二:Solr与mmseg4j的整合
  7. iOS开发之XMPP即时通讯简单实现
  8. php 创建删除数据库
  9. Android原生跳转React不同页面(undefined is not an object)
  10. zlib1.2.11静态编译
  11. Form 表单相关小技巧
  12. css3——border-image属性的用法
  13. HTML文档结构
  14. 【Vue.js】vue基础: 3种Class和Style绑定语法
  15. 无知小子踏入python web大门
  16. 接口调用,输出结果为Json格式(ConvertTo-Json),提交参数给URL(WebRequest)
  17. 贪吃蛇小游戏-----C语言实现
  18. HadoopMR-Spark-HBase-Hive
  19. PL/SQL详细介绍,设置oracle相关
  20. Linux下 ps -ef 和 ps aux 的区别及格式详解

热门文章

  1. sourcemap的使用
  2. 【转】CSS实现div的高度填满剩余空间
  3. 无网络centos7中部署kubernetes
  4. Javascript学习笔记1 数论
  5. uva12534 Binary Matrix 2(最小费用最大流)
  6. ZOJ 2677 Oil Deal(最大生成树)
  7. kafka配置
  8. iframe父子兄弟之间调用传值(contentWindow &amp;&amp; parent)
  9. IDA 与VC 加载符号表
  10. ARP欺骗与中间人攻击