P4450 双亲数

思路

同zap-queries
莫比乌斯反演的板子
数据范围小到不用整除分块。。。

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int mu[1010000],isprime[1010000],iprime[1010000],cnt,n,m,d;
void prime(int n){
    isprime[1]=true;
    mu[1]=1;
    for(int i=2;i<=n;i++){
        if(!isprime[i]){
            iprime[++cnt]=i;
            mu[i]=-1;
        }
        for(int j=1;j<=cnt&&iprime[j]*i<=n;j++){
            isprime[iprime[j]*i]=true;
            mu[iprime[j]*i]=-mu[i];
            if(i%iprime[j]==0){
                mu[iprime[j]*i]=0;
                break;
            }
        }
    }
}
signed main(){
    prime(1000100);
    scanf("%lld %lld %lld",&n,&m,&d);
    if(n<m)
        swap(n,m);
    int ans=0;
    for(int i=1;i<=n/d;i++){
        ans+=mu[i]*(m/(i*d))*(n/(i*d));
    }
    printf("%lld
",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/dreagonm/p/10458420.html