SPOJ 7001 Visible Lattice Points (莫比乌斯反演+分块)
来源:互联网 发布:麦克风测试软件汉化 编辑:程序博客网 时间:2024/06/05 17:57
思路:
跟bzoj 2190差不多,这道题是那个的升级版,这个变成了三维的。
思路一模一样。
算完三维的,记得加上3个剩下的2维的平面上点的贡献就好。
#include<stdio.h>#include <iostream>#include<string.h>#include<math.h>#include<algorithm>#define eps 1e-8typedef long long int lli;using namespace std;const int maxn = 1e6+10;bool isprime[maxn];int prime[maxn];char miu[maxn];void moblus(){ int cnt = 0;miu[1] = 1; for(lli i = 2;i < maxn;i++){ if(!isprime[i]){ prime[cnt++] = i,miu[i] = -1;//phi[i] = i-1; } for(lli j = 0;j < cnt && i*prime[j] < maxn;j++){ lli x = prime[j]; isprime[i*x] = 1; if(i%x){ miu[i*x] = -miu[i]; //phi[i*x] = phi[i] * phi[x]; } else{ miu[i*x] = 0; //phi[i*x] = phi[i] * x; break; } } }}int ff[maxn],sum[maxn];int main(){ lli q; scanf("%lld",&q); moblus(); for(int i = 1;i <= maxn;i++){ sum[i] = sum[i-1] + miu[i]; } while(q--){ lli a,b; scanf("%lld",&a); lli ans = 0,l; for(int i = 1;i <= 1;i++){ lli n = a/i; for(int j=1;j<=n;j=l+1){//分块加速 l= n/(n/j); ans += (lli)(sum[l]-sum[j-1])*(n/j)*(n/j)*(n/j); } } lli n = a,tempans = 0; for(int j=1;j<=n;j=l+1){//分块加速 l= n/(n/j); tempans += (lli)(sum[l]-sum[j-1])*(n/j)*(n/j); } printf("%lld\n",ans+3*tempans+3); } return 0;}
阅读全文
0 0
- SPOJ 7001 Visible Lattice Points (莫比乌斯反演+分块)
- SPOJ 7001 Visible Lattice Points (莫比乌斯反演)
- SPOJ 7001 Visible Lattice Points (莫比乌斯反演)
- SPOJ 7001 Visible Lattice Points(莫比乌斯反演)
- 【SPOJ7001】Visible Lattice Points-莫比乌斯反演+分块
- spoj 7001. Visible Lattice Points(莫比乌斯反演)
- SPOJ VLATTICE - Visible Lattice Points 莫比乌斯反演
- SPOJ 7001. Visible Lattice Points (莫比乌斯反演)
- 【莫比乌斯反演】[SPOJ-VLATTICE]Visible Lattice Points
- 【莫比乌斯反演】[SPOJ VLATTICE]Visible Lattice Points
- SPOJ VLATTICE Visible Lattice Points - 莫比乌斯反演
- SPOJ 7001. Visible Lattice Points 莫比乌斯反演
- SPOJ VLATTICE Visible Lattice Points[莫比乌斯反演]
- SPOJ 7001 Visible Lattice Points(莫比乌斯反演)
- SPOJ 7001 VLATTICE - Visible Lattice Points(莫比乌斯反演)
- SPOJ 7001-Visible Lattice Points (莫比乌斯反演)
- SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演)
- SPOJ VLATTICE Visible Lattice Points(莫比乌斯反演入门)
- C语言入门:求一批整数中出现最多的数字
- 8月11日总结
- if __name__ == '__main__'到底干了什么?(关键词:Python、__name__、__main__)
- 笨办法学 Python · 续 第五部分:文本解析
- 2017 8.11
- SPOJ 7001 Visible Lattice Points (莫比乌斯反演+分块)
- stdlib.h包含的函数
- 8.11
- 2017/8/11
- license
- 冒泡排序
- AC自动机模板
- QAQ & 君临天下 || 天行九歌
- 关于冒泡排序的若干回顾经验