• bzoj 2301: [HAOI2011]Problem b


     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #define M 50009
     5 #define ll long long
     6 using namespace std;
     7 int n,a,b,c,d,k,mo[M+5],zhan[M],cnt,sum[M];
     8 bool mark[M+5];
     9 void mobiwus()
    10 {
    11     mo[1]=1;
    12     for(int i=2;i<=M;i++)
    13       {
    14         if(!mark[i])
    15           {
    16             mo[i]=-1;
    17             zhan[++cnt]=i;
    18           }
    19         for(int j=1;zhan[j]*i<=M&&j<=cnt;j++)
    20           {
    21             mark[zhan[j]*i]=1;
    22             if(i%zhan[j])
    23               mo[i*zhan[j]]=mo[i]*mo[zhan[j]];
    24             else
    25               mo[i*zhan[j]]=0;
    26           }
    27       }
    28 }
    29 ll su(int n,int m)
    30 {
    31     n/=k;
    32     m/=k;
    33     if(n>m)
    34       swap(n,m);
    35     int ans=0,last;
    36     for(int i=1;i<=n;i=last+1)
    37       {
    38         last=min(n/(n/i),m/(m/i));
    39         ans+=(ll)(n/i)*(m/i)*(sum[last]-sum[i-1]);
    40       }
    41       return ans;
    42 }
    43 int main()
    44 {
    45     mobiwus();
    46     for(int i=1;i<=M;i++)
    47       sum[i]=sum[i-1]+mo[i];
    48     scanf("%d",&n);
    49     for(int i=1;i<=n;i++)
    50       {
    51         scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
    52         printf("%lld
    ",su(b,d)-su(a-1,d)-su(b,c-1)+su(a-1,c-1));
    53       }
    54     return 0;
    55 }

    莫比乌斯反演

  • 相关阅读:
    第七章
    第五章
    第六章
    Git使用入门
    源代码的下载和编译
    向中国最牛的前端群-鬼群致敬
    Normalize.css做了哪些事情--看代码
    谷歌浏览器:书签被误删了怎么办
    2013/8月读书计划
    Limu:JavaScript的那些书
  • 原文地址:https://www.cnblogs.com/xydddd/p/5300157.html
Copyright © 2020-2023  润新知