BZOJ 1101: [POI2007]Zap|莫比乌斯反演

来源:互联网 发布:短信监控软件 编辑:程序博客网 时间:2024/05/16 11:36

似乎和problem b一模一样
水一发

#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<iostream>#include<algorithm>#define N 50005using namespace std;int sc(){    int i=0,f=1; char c=getchar();    while(c>'9'||c<'0'){if(f=='-')f=-1;c=getchar();}    while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();    return i;}int prime[N],a[N],mu[N];void pre(){    int top=0; mu[1]=1;    for(int i=2;i<=N;i++)    {        if(!a[i])        {            prime[++top]=i;            mu[i]=-1;        }        for(int j=1;prime[j]*i<N;j++)        {            a[i*prime[j]]=1;            if(i%prime[j]==0)                break;            mu[i*prime[j]]=-mu[i];        }    }    for(int i=2;i<N;i++) mu[i]+=mu[i-1];}   int main(){    pre();    int T=sc();    while(T--)    {        int ans=0,n=sc(),m=sc(),z=sc();        n/=z;        m/=z;        if(n>m)swap(n,m);        for(int i=1,last;i<=n;i=last+1)        {            last=min(n/(n/i),m/(m/i));            ans+=(n/i)*(m/i)*(mu[last]-mu[i-1]);        }        printf("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击