题目
在这里插入图片描述

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=5e4+5;
int is[N],prime[N],mu[N],sum[N];
void Moblus()
{
    mu[1]=1;int tot=0;
    for(int i=2;i<=N-5;++i)
    {
        if(!is[i]) prime[++tot]=i,mu[i]=-1;
        for(int j=1;j<=tot&&(ll)i*prime[j]<=N-5;++j)
        {
            int t=i*prime[j];is[t]=1;
            if(i%prime[j]==0) {mu[t]=0;break;}
            mu[t]=-mu[i];
        }
    }
    for(int i=1;i<=N-5;++i) sum[i]=sum[i-1]+mu[i];
}
int main()
{
    Moblus();
    int T;scanf("%d",&T);
    while(T--)
    {
        int a,b,d;scanf("%d%d%d",&a,&b,&d);
        a/=d,b/=d;
        if(a>b) swap(a,b);
        int las;ll ans=0;
        for(int i=1;i<=a;i=las+1)
        {
            las=min(a/(a/i),b/(b/i));
            ans+=(ll)(sum[las]-sum[i-1])*(a/i)*(b/i);
        }
        printf("%lld\n",ans);
    }
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐