hdu 1695 GCD 莫比乌斯
2016-08-18 13:24
302 查看
GCD
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9765 Accepted Submission(s): 3652
[align=left]Problem Description[/align]
Given
5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that
GCD(x, y) = k. GCD(x, y) means the greatest common divisor of x and y.
Since the number of choices may be very large, you're only required to
output the total number of different number pairs.
Please notice that, (x=5, y=7) and (x=7, y=5) are considered to be the same.
Yoiu can assume that a = c = 1 in all test cases.
[align=left]Input[/align]
The
input consists of several test cases. The first line of the input is
the number of the cases. There are no more than 3,000 cases.
Each
case contains five integers: a, b, c, d, k, 0 < a <= b <=
100,000, 0 < c <= d <= 100,000, 0 <= k <= 100,000, as
described above.
[align=left]Output[/align]
For each test case, print the number of choices. Use the format in the example.
[align=left]Sample Input[/align]
2
1 3 1 5 1
1 11014 1 14409 9
[align=left]Sample Output[/align]
Case 1: 9
Case 2: 736427
Hint
For the first sample input, all the 9 pairs of numbers are (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 5), (3, 4), (3, 5).
[align=left]Source[/align]
2008 “Sunline Cup” National Invitational Contest
#include<bits/stdc++.h> using namespace std; #define ll long long #define esp 0.00000000001 #define pi 4*atan(1) const int N=1e5+10,M=1e7+10,inf=1e9+10,mod=1e9+7; int mu , p , np , cnt, sum ; void init() { mu[1]=1; for(int i=2; i<N; ++i) { if(!np[i]) p[++cnt]=i, mu[i]=-1; for(int j=1; j<=cnt && i*p[j]<N; ++j) { int t=i*p[j]; np[t]=1; if(i%p[j]==0) { mu[t]=0; break; } mu[t]=-mu[i]; } } } int main() { int T,cas=1; init(); scanf("%d",&T); while(T--) { int a,b,c,d,k; scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); if(k==0) { printf("Case %d: 0\n",cas++); continue; } b/=k,d/=k; if(b>=d)swap(b,d); ll ans=0; for(int i=1;i<=b;i++) { ans+=(ll)mu[i]*(b/i)*(d/i); } ll ans2=0; for(int i=1;i<=b;i++) { ans2+=(ll)mu[i]*(b/i)*(b/i); } printf("Case %d: %lld\n",cas++,ans-ans2/2); } return 0; }
相关文章推荐
- hdu 1695: GCD 【莫比乌斯反演】
- HDU 1695 GCD (容斥 + 莫比乌斯反演)
- hdu 1695 GCD(莫比乌斯)
- HDU 1695 GCD [莫比乌斯反演]
- HDU 1695 GCD(莫比乌斯反演,入门)
- hdu 1695 GCD 欧拉函数+容斥 ||莫比乌斯反演
- HDU 1695 GCD (莫比乌斯反演入门学习小结)
- HDU 1695 GCD 【莫比乌斯入门】
- hdu 1695 GCD(莫比乌斯反演+分块模板)
- 【数论-莫比乌斯入门】hdu 1695 GCD
- HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演
- HDU1695 GCD 数论之 莫比乌斯反演
- HDU - 1695 GCD 莫比乌斯反演
- HDU 1695 GCD【莫比乌斯反演】
- HDU 1695 GCD 莫比乌斯,容斥原理
- HDU 莫比乌斯反演 1695 GCD
- HDU 1695 GCD 欧拉函数+容斥定理
- HDU 1695 - GCD
- HDU 1695 GCD 容斥原理+欧拉
- HDU 1695 GCD