洛谷P2257 莫比乌斯反演

洛谷P2257 莫比乌斯反演_第1张图片

洛谷P2257 莫比乌斯反演_第2张图片

 

#include

using namespace std;

const int maxn=1e7+10;

typedef long long  ll;

bool vis[maxn];
int mu[maxn];
ll sum[maxn];
int prime[maxn];
int g[maxn];

void get_mu(int n){
    int tot=0;
    mu[1]=1;
    for(int i=2;i<=n;i++){
        if(!vis[i]){
            mu[i]=-1;
            prime[tot++]=i;
        }
        for(int j=0;jm) swap(n,m);
        ll ans=0;
        for(int l=1,r;l<=n;l=r+1){
            r=min(n/(n/l),m/(m/l));
            if(r>n) r=n;
            ans+=1ll*(n/l)*(m/l)*(sum[r]-sum[l-1]);
        }
        printf("%lld\n",ans);
    }
}

 

你可能感兴趣的:(组合数学,数论)