求调
查看原帖
求调
1000298
Vsinger_洛天依楼主2024/1/9 15:13

站外题或者站内有我不知道

对于莫反出来的式子

∑t=1n⌊nt⌋⌊mt⌋∑d∣tμ(d)f(td)\sum_{t=1}^{n}\lfloor \frac n{t}\rfloor\lfloor \frac m{t}\rfloor\sum_{d|t}^{}\mu(d)f(\frac{t}{d})

我写了个代码然后似了

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
	int x=0,f=1,ch=getchar();
	while(!isdigit(ch)) { if(ch == '-') f = -f; ch = getchar(); }
	while(isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); }
	return x * f;
}
const int maxn=10000010;
int T,n,pri[maxn],cur,mu[maxn],Mu[maxn],g[maxn],tot;
bool vis[maxn];
map<int,int> mapp;
inline int S_mu(int x){
    if(x<maxn)  return Mu[x];
    if(mapp[x]) return mapp[x];
    int ret=1;
    for(int i=2,j;i<=x;i=j+1){
        j=x/(x/i);
        ret-=S_mu(x/i)*(j-i+1);
    }
    return mapp[x]=ret;
}
inline int S_phi(int x){
    int ret=0,j;
    for(int i=1;i<=x;i=j+1){
        j=x/(x/i);
        ret+=(S_mu(j)-S_mu(i-1))*(x/i)*(x/i);
    }
    return (ret-1)/2+1;
}
signed main(){
	mu[1]=1;
    for(int i=2;i<=1e7;i++){
        if(!vis[i]) 
            pri[++tot]=i,
            mu[i]=-1,
            g[i]=1;
        for(int j=1;j<=tot&&i*pri[j]<=1e7;j++){
            vis[i*pri[j]]=1;
            if(!(i%pri[j])){
                mu[i*pri[j]]=0;
                g[i*pri[j]]=mu[i];
                break;
            }
            else 
                mu[i*pri[j]]=-mu[i],
                g[i*pri[j]]=mu[i]-g[i];
        }
    }
    for(int i=1;i<=1e7;i++) 
        Mu[i]=Mu[i-1]+g[i];
	T=read();
	while(T--){
		int a=read(),b=read(),ans=0;
		int x=min(a,b);
		for(int i=1,j;i<=x;i=j+1){
			j=min(a/(a/i),b/(b/i));
			ans+=(S_mu(j)-S_mu(i-1))*(a/i)*(b/i);
		}
		cout<<ans<<'\n';
	}
    return 0;
}
2024/1/9 15:13
加载中...