洛谷-2522 [HAOI2011]Problem b

来源:互联网 发布:淘宝客推广个多少钱 编辑:程序博客网 时间:2024/05/24 06:24

洛谷 2522 [HAOI2011]Problem b

推导一下

f(n,m,k)=i=1nj=1m[Gcd(i,j)=k]

F(n,m,k)=i=1nj=1m[k|Gcd(i,j)]

先不管f(n,m,k)
我们先化简F(n,m,k)

F(n,m,k)=i=1nkj=1mk1=nkmk

轻松愉快

然后有

X=min(n,m)

F(n,m,k)=nk|xXf(n,m,nk)I

f(n,m,k)=i=1XkF(n,m,ik)μ(ik)

f(n,m,k)=i=1Xknikmikμ(ik)

于是 我们成功将O(n2T)变成了O(nT)
但是 还不够

观察下图


能够看到 许多的nikmik都是相同的
于是 我们就想办法把相同的合并到一起

对于每一个i我们可以通过 mmik求出 最后一个满足mik相同的位置

同时 m(i1)k的位置我们记下了

那么当前的mik的第一个位置即是 上一个位置+1

另外 凑巧的是 因为nikmik的值一直相同

所以对于这一连串的nikmikμ(ik)

我们只需要求出μ(ik)的前缀和 就可以快速求出这一段的和了

(恐怕看完这一段你都不知道你一开始在求什么了)

附上理解代码

#include <iostream>#include <cstdio>#define LL long longusing namespace std;inline int input(){    char c=getchar();int o;bool f=0;    while(c>57||c<48)f|=(c=='-'),c=getchar();    for(o=0;c>47&&c<58;c=getchar())o=(o<<1)+(o<<3)+c-48;    return f?-o:o;}const int N=50123;int mu[N],sum[N],prime[N],cnt=0;bool mark[N];void GetMu(){    int num;    sum[1]=mu[1]=1;    for(int i=2;i<=50000;i++)    {        if(!mark[i]){mu[i]=-1,prime[++cnt]=i;}        for(int k=1;k<=cnt;k++)        {            num=i*prime[k];            if(num>N)break;            mark[num]=1;            if(i%prime[k]==0){mu[num]=0;break;}            else mu[num]=-mu[i];        }        sum[i]=sum[i-1]+mu[i];    }}int Cal(int a,int b){    if(a>b)swap(a,b);    int ans=0,pos;    for(int i=1;i<=a;i=pos+1)\\pos为上一个的末尾位置 当前+1    {        pos=min(a/(a/i),b/(b/i));\\要保证一连串都相同 所以取两者之中的更小值        ans+=(sum[pos]-sum[i-1])*(a/i)*(b/i);    }    return ans;}int main(){    //freopen("In.txt","r",stdin);    GetMu();    int T=input(),a,b,c,d,k,res;    while(T--)    {        a=input();b=input();c=input();d=input();k=input();        a--;c--;        a/=k;b/=k;c/=k;d/=k;        res=Cal(a,c)+Cal(b,d)-Cal(a,d)-Cal(b,c);        printf("%d\n",res);    }    return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 摩登天空 摩登爱情 摩登舞 摩登新人类 摩登女郎 摩登笑探 摩登宝盒 摩登月老 摩登红人 摩登情人 摩登意思 摩登原始人 摩登城市 摩登女孩 摩登衣服 复古摩登 摩登汽车 摩登服饰 摩登网 贝贝摩登 摩登小镇 摩登英文 摩登平台 摩登装饰 摩登大师 摩登密码 摩登品牌 摩登是什么 摩登裙子 摩登咖啡 摩登的意思 摩登燕尾服 摩登世界 摩登那 摩登舞蹈服 摩登注册 摩登家庭第十一季 摩登保镖国语 摩登家庭第一季 摩登家庭十一季 摩登保镖粤语