bzoj 1101 [POI2007]Zap 莫比乌斯反演

来源:互联网 发布:ca网络检测未通过 编辑:程序博客网 时间:2024/05/17 01:01

莫比乌斯反演裸题

#include <bits/stdc++.h>using namespace std;#define N 51000#define ll long long int prime[N],ip[N],mu[N];int T,n,m,d,cnt;ll ans;void init(){    mu[1]=1;    for(int i=2;i<=50000;i++)    {        if(!ip[i])prime[++cnt]=i,mu[i]=-1;        for(int j=1;j<=cnt&&i*prime[j]<=50000;j++)        {            ip[i*prime[j]]=1;            if(i%prime[j]==0)break;            mu[i*prime[j]]=-mu[i];        }    }}int main(){    //freopen("tt.in","r",stdin);    init();    for(int i=1;i<=50000;i++)        mu[i]+=mu[i-1];    scanf("%d",&T);    while(T--)    {        scanf("%d%d%d",&n,&m,&d);        ans=0;        for(int i=1,last;i<=n/d&&i<=m/d;i=last+1)        {            last=min(n/(n/i),m/(m/i));            ans+=(ll)(n/i/d)*(m/i/d)*(mu[last]-mu[i-1]);        }        printf("%lld\n",ans);    }    return 0;}
0 0
原创粉丝点击