ZOJ 3435 Ideal Puzzle Bobble(gcd(i,j,k)=1/莫比乌斯反演)
2016-06-06 21:57
369 查看
题目链接:
ZOJ 3435 Ideal Puzzle Bobble
题意:
∑i=0i=a∑j=0j=b∑k=0k=c[gcd(i,j,k)==1],a,b,c∈[1,1000000]
分析;
1.当i=j=k=0时是不成立的。
2.当i,j,k中有两个为0时,只有三种情况(0,0,1),(0,1,0),(1,0,0).
3.当i,j,k中有一个为0时,相当于求gcd(i,j)=1,gcd(i,k)=1,gcd(j,k)=1)的对数。
4.当i,j,k均大于0时,相当于求gcd(i,j,k)=1(i∈[1,a],j∈[1,b],k∈[1,c])的对数。
对于3.4两种情况用莫比乌斯反演即可。
ZOJ 3435 Ideal Puzzle Bobble
题意:
∑i=0i=a∑j=0j=b∑k=0k=c[gcd(i,j,k)==1],a,b,c∈[1,1000000]
分析;
1.当i=j=k=0时是不成立的。
2.当i,j,k中有两个为0时,只有三种情况(0,0,1),(0,1,0),(1,0,0).
3.当i,j,k中有一个为0时,相当于求gcd(i,j)=1,gcd(i,k)=1,gcd(j,k)=1)的对数。
4.当i,j,k均大于0时,相当于求gcd(i,j,k)=1(i∈[1,a],j∈[1,b],k∈[1,c])的对数。
对于3.4两种情况用莫比乌斯反演即可。
#include <cstdio> #include <cstring> #include <string> #include <cmath> #include <algorithm> #include <bitset> using namespace std; typedef long long ll; const int MAX_N = 1000010; int prime_cnt, prime[MAX_N], mu[MAX_N]; ll sum[MAX_N]; bitset<MAX_N> bs; void GetMu() { prime_cnt = 0; bs.set(); mu[1] = 1; for(int i = 2; i < MAX_N; ++i) { if(bs[i]) { prime[prime_cnt++] = i; mu[i] = -1; } for(int j = 0; j < prime_cnt && i * prime[j] < MAX_N; ++j) { bs[i * prime[j]] = 0; if(i % prime[j]) { mu[i * prime[j]] = - mu[i]; }else { mu[i * prime[j]] = 0; break; } } } for(int i = 1; i < MAX_N; ++i) { sum[i] = sum[i - 1] + mu[i]; } } int main() { GetMu(); int a, b, c; while(~scanf("%d%d%d", &a, &b, &c)){ a--, b--, c--; if(a > b) swap(a, b); if(a > c) swap(a, c); if(b > c) swap(b, c); // a <= b <= c ll ans = 3, tmp; int last, x, y, z; for(int i = 1; i <= b; i = last + 1) {//注意枚举的范围 last = i; x = a / i, y = b / i, z = c / i; if(i <= a){ last = min(a / x, b / y); last = min(last, c / z); }else {//防止出现除以0 last = min(b / y, c / z); } tmp = (ll) x * y * z + (ll)x * y + (ll)x * z + (ll)y * z; ans += tmp * (sum[last] - sum[i - 1]); } printf("%lld\n", ans); } return 0; }
相关文章推荐
- zoj3549 快速幂
- ZOJ 1002
- ZOJ-3861 DFS+回溯
- ZOJ3279 —— 8G island
- zoj_1004-Anagrams by stack
- zoj_2278-Fight for Food
- ZOJ 1001 A+B Problem
- zoj 2710 Two Pipelines
- zoj 386 4000 1 Valid Pattern Lock
- ZOJ 3755 Mines 回溯+剪枝
- ZOJ3750 Dot Dot Dot 枚举状态+BFS
- poj 1514&zoj 1185 Metal Cutting(半平面交)
- ZOJ1101-Gamblers 终于AC。。。
- zoj 1148 The Game 一个晚上终于AC!
- HDU 5341 Gcd and Lcm
- zoj 3420 纯bfs
- PAT 01-复杂度2. Maximum Subsequence Sum (25)&&PAT 01-复杂度1. 最大子列和问题(20)
- 狗狗40题~ (Volume A)
- 狗狗40题~ (Volume B)
- 狗狗40题~ (Volume C)