莫比乌斯反演--HDU模板题

题意:http://acm.hdu.edu.cn/showproblem.php?pid=1695

直接上莫比乌斯模板。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const long long maxn=100005;
 4 
 5 long long mu[maxn],pri[maxn],v[maxn],sum[maxn],cnt=0;
 6 
 7 void init()
 8 {
 9           mu[1]=1;
10           for(long long i=2;i<maxn;i++)
11           {
12                     if(!v[i])
13                     {
14                               pri[++cnt]=i;
15                               mu[i]=-1;
16                     }
17                     for(long long j=1;i*pri[j]<maxn;j++)
18                     {
19                               v[i*pri[j]]=1;
20                               if(i%pri[j]==0)
21                               {
22                                         mu[pri[j]*i]=0;
23                                         break;
24                               }
25                               mu[i*pri[j]]=-mu[i];
26                     }
27           }
28           sum[0]=0;
29           for(long long i=1;i<maxn;i++)
30                     sum[i]=sum[i-1]+mu[i];
31 }
32 int main()
33 {
34           init();
35           long long a,b,c,d,k;
36           long long t;
37           scanf("%lld",&t);
38           for(long long ca=1;ca<=t;ca++)
39           {
40                     scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&k);
41                     if(k==0)
42                     {
43                               printf("Case %lld: %lld\n",ca,0);
44                               continue;
45                     }
46                     b/=k,d/=k;
47                     if(b>d)
48                               swap(b,d);
49                     long long ans1=0,ans2=0;
50                     for(long long i=1,r;i<=b;i=r+1)
51                     {
52                               r=min(b/(b/i),d/(d/i));
53                               ans1+=(sum[r]-sum[i-1])*(b/i)*(d/i);
54                               ans2+=(sum[r]-sum[i-1])*(b/i)*(b/i);
55                     }
56                     printf("Case %lld: %lld\n",ca,ans1-ans2/2);
57           }
58           return 0;
59 }

 

posted @ 2019-11-07 20:31  ZMWLxh  阅读(215)  评论(0编辑  收藏  举报