A Simple Math Problem
分析:
-
莫比乌斯函数反演
∑ i = 1 n ∑ j = 1 i [ g c d ( i , j ) = = 1 ] f ( j ) = ∑ j = 1 n ∑ i = j n f ( j ) ∑ d ∣ ( i , j ) u ( d ) = ∑ d = 1 n ∑ j = 1 [ n d ] ∑ i = j [ n d ] f ( j ∗ d ) ∗ u [ d ] = ∑ d = 1 n u ( d ) ∑ j = 1 [ n d ] f ( j ∗ d ) ∑ i = j [ n d ] 1 = ∑ d = 1 n u ( d ) ∑ j = 1 [ n d ] f ( j ∗ d ) ∗ ( [ n d ] − j + 1 ) \begin{aligned} &\sum_{i=1}^n\sum_{j=1}^i[gcd(i,j)==1]f(j)\\ =&\sum_{j=1}^n\sum_{i=j}^nf(j)\sum_{d|(i,j)}u(d)\\ =&\sum_{d=1}^{n}\sum_{j=1}^{[\frac{n}{d}]}\sum_{i=j}^{[\frac{n}{d}]}f(j*d)*u[d]\\ =&\sum_{d=1}^{n}u(d)\sum_{j=1}^{[\frac{n}{d}]}f(j*d)\sum_{i=j}^{[\frac{n}{d}]}1\\ =&\sum_{d=1}^{n}u(d)\sum_{j=1}^{[\frac{n}{d}]}f(j*d)*([\frac{n}{d}]-j+1)\\ \end{aligned} ====i=1∑nj=1∑i[gcd(i,j)==1]f(j)j=1∑ni=j∑nf(j)d∣(i,j)∑u(d)d=1∑nj=1∑[dn]i=j∑[dn]f(j∗d)∗u[d]d=1∑nu(d)j=1∑[dn]f(j∗d)i=j∑[dn]1d=1∑nu(d)j=1∑[dn]f(j∗d)∗([dn]−j+1)
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int mu[N], b[N], pri[N];
void mus(int n)
{
int tot=0;
mu[1] = 1;
for(int i=2;i<n;i++)
{
if(!b[i]) mu[i] = -1, pri[++tot] = i;
for(int j=1;j<=tot && i*pri[j]<n;j++)
{
b[i*pri[j]] = 1;
if(i%pri[j]==0) break ;
mu[i*pri[j]] = -mu[i];
}
}
}
int f[N];
signed main()
{
int n;
cin>>n;
mus(n+5);
for(int i=1;i<=n;i++) f[i]=i%10+f[i/10];
long long ans=0;
for(int d=1;d<=n;d++)
{
for(int j=1;j*d<=n;j++)
{
ans+=mu[d]*f[j*d]*(n/d-j+1);
}
}
cout<<ans<<endl;
return 0;
}