社区讨论
悬关 莫比乌斯反演 95pts 求调
P1829[国家集训队] Crash的数字表格 / JZPTAB参与者 1已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lz6kani3
- 此快照首次捕获于
- 2024/07/29 13:41 2 年前
- 此快照最后确认于
- 2024/07/29 14:51 2 年前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e7+7,mod=20101009;
int n,m,mu[N],prime[N],top,f[N],ans;
bool vis[N];
int tot(int x){
return (x*(x+1)/2)%mod;
}
void init(){
mu[1]=1;
for(int i=2;i<N;++i){
if(!vis[i]){
mu[i]=-1;
prime[++top]=i;
}
for(int j=1;j<=top,i*prime[j]<N;++j){
vis[i*prime[j]]=true;
if(i%prime[j]==0){
mu[i*prime[j]]=0;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
for(int t=1;t<N;++t)
f[t]=((t%mod*t%mod)%mod*mu[t])%mod;
for(int i=1;i<N;++i)
f[i]=(f[i]+f[i-1]%mod)%mod;
}
int compute(int n,int m,int d){
n/=d,m/=d;
int res=0;
for(int l=1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
res+=((((f[r]-f[l-1])%mod*tot(n/l))%mod)*(tot(m/l)%mod))%mod;
}
return res%mod;
}
signed main(){
init();
cin>>n>>m;
if(n>m)
swap(n,m);
for(int d=1;d<=n;++d)
ans+=(d*compute(n,m,d)%mod)%mod;
cout<<ans%mod;
return 0;
}
个人认为可能是取模或者精度问题。
回复
共 2 条回复,欢迎继续交流。
正在加载回复...