莫比乌斯反演。
2*sigma T [n/T]*[m/T]*phi(T)-m*n;
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef int INT;
#define int long long
const int N=1e6;
int cnt=0;
int vis[N]={0};
int prim[N]={0};
int phi[N]={0};
void pre(){
phi[1]=1;
for(int i=2;i<=1e5;i++){
if(!vis[i]){
cnt++;
prim[cnt]=i;
phi[i]=i-1;
}
for(int j=1;j<=cnt&&i*prim[j]<=1e5;j++){
vis[i*prim[j]]=1;
if(i%prim[j]==0){
phi[i*prim[j]]=phi[i]*prim[j];
break;
}
phi[i*prim[j]]=phi[i]*phi[prim[j]];
}
}
}
int n,m;
int ans=0;
INT main(){
pre();
cin>>n>>m;
for(int i=1;i<=min(n,m);i++){
ans+=(n/i)*(m/i)*phi[i];
}
cout<<2*ans-n*m<<endl;
}
本文深入探讨了莫比乌斯反演算法的实现原理及应用,通过具体代码展示了如何利用该算法解决数学问题,包括预处理质数、欧拉函数计算以及最终的公式推导。
286

被折叠的 条评论
为什么被折叠?



