解题报告:SPOJ
来源:互联网 发布:死飞自行车多少钱淘宝 编辑:程序博客网 时间:2024/05/20 08:42
题目链接
题意:
有一个边长为n的立方体,你位于(0,0,0)处,问能看见的格子数目。
某个格子能被看见当且仅当它与原点的连线上不存在其他的格子。
思路:
之前做过一个二维的版本:HDU2841 Visible Trees 莫比乌斯反演
思路是差不多的,分成三个部分求:
对于(x!=0&&y!=0&&z!=0)的所有点,要求 gcd(x,y,z)==1的点数
然后三个面上的点分别求gcd(x,y)==1 , gcd(x,z)==1 ,gcd(y,z)==1 的点数,很明显每个面的点数是一样多的。
最后加上三个位于轴上的点即可
代码:
#include<bits/stdc++.h>using namespace std;const int N = 1e6+10;vector<int>pr;bool Np[N];int sum[N];void init(){ sum[1] = 1; for(int i=2;i<N;i++){ if(!Np[i]){ sum[i] = -1; pr.emplace_back(i); }for(int j=0;j<pr.size();j++){ int t = pr[j] * i; if(t>=N)break; Np[t] = true; if(i%pr[j]==0){ sum[t] = 0; break; }sum[t] = - sum[i]; }sum[i] += sum[i-1]; }}int main(){ init(); int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); long long ans = 3; for(int i=1,last;i<=n;i=last+1){ last = n/(n/i); ans += 1LL * (sum[last]-sum[i-1]) * (n/i) * (n/i) * ( (n/i) + 3 ) ; }printf("%lld\n",ans); }return 0;}
阅读全文
0 0
- 解题报告:SPOJ
- Spoj数论专场解题报告
- SPOJ AMR12C Entmoot 解题报告
- SPOJ AMR12E Dyslexic Gollum 解题报告
- SPOJ AMR12H Wormtongues Mind 解题报告
- SPOJ AMR12A The Black Riders 解题报告
- SPOJ 694 后缀数组 解题报告
- SPOJ tutorial 429 Simple Numbers Conversion 解题报告
- SPOJ-9652 Robots on a grid 解题报告
- SPOJ AMR12G The Glittering Caves of Aglarond 解题报告
- SPOJ AMR12B Gandalf vs the Balrog 解题报告
- SPOJ AMR12I Saruman of Many Colours 解题报告
- SPOJ AMR12K The Loyalty of the Orcs 解题报告
- SPOJ AMR12J Escape from the Mines 解题报告
- SPOJ AMR12D The Mirror of Galadriel 解题报告
- SPOJ 1825 Free tour II 解题报告(树分治)
- SPOJ 375. Query on a tree 解题报告(树链剖分)
- SPOJ 287 网络流最大流+二分答案 解题报告
- 64位Linux下安装mysql-5.7.13-linux-glibc2.5-x86_64
- C语言-可变参数列表
- Qt :图片与QByteArray互转
- java类型转换小工具
- 动态规划——Bubble Sort Graph
- 解题报告:SPOJ
- R语言-数据类型
- POJ 2115 C Looooops extend gcd +找点
- 查找:静态查找表
- Python之路-python(mysql介绍和安装、pymysql、ORM sqlachemy)
- 消息驱动与事件驱动比较
- 讲一讲楼主从工程监理到软件测试又走出软件测试的这一年
- JavaScript 常用正则大集合!
- 《从程序员到项目经理》内容记录