题目:
题解:
莫比乌斯反演
推导过程如下
∑ i = 1 n ∑ j = 1 i F [ j ] [ g c d ( i , j ) = 1 ] \sum_{i=1}^{n}\sum_{j=1}^{i} {F[j][gcd(i,j)=1]} ∑i=1n∑j=1iF[j][gcd(i,j)=1]
可以转化为 ∑ i = 1 n F [ i ] ∑ j = i n g c d [ ( i , j ) = 1 ] \sum_{i=1}^{n}{F[i]} \sum_{j=i}^{n} {gcd[(i,j)=1]} ∑i=1nF[i]∑j=ingcd[(i,j)=1]
∑ i = 1 n F [ i ] ∑ j = i n g c d [ ( i , j ) = 1 ] \sum_{i=1}^{n}{F[i]} \sum_{j=i}^{n} {gcd[(i,j)=1]} ∑i=1nF[i]∑j=ingcd[(i,j)=1]
= ∑ i = 1 n F [ i ] ∑ j = i n ∑ d ∣ g c d ( i , j ) μ ( d ) \sum_{i=1}^{n}{F[i]} \sum_{j=i}^{n} \sum_{d|gcd(i,j)}{\mu(d)} ∑i=1nF[i]∑j=in∑d∣gcd(i,j)μ(d)
= ∑ d = 1 n μ ( d ) ∑ i = 1 [ n / d ] F [ i ∗ d ] ∑ j = i [ n / d ] 1 \sum_{d=1}^{n}{\mu(d)} \sum_{i=1}^{[n/d]}{F[i*d]} \sum_{j=i}^{[n/d]}{1} ∑d=1nμ(d)∑i=1[n/d]F[i∗d]∑j=i[n/d]1
= ∑ d = 1 n μ ( d ) ∑ i = 1 [ n / d ] F [ i ∗ d ] ( n / i − i + 1 ) \sum_{d=1}^{n}{\mu(d)} \sum_{i=1}^{[n/d]}{F[i*d]}(n/i-i+1) ∑d=1nμ(d)∑i=1[n/d]F[i∗d](n/i−i+1)
推导完成
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int st[N],primes[N],mu[N],con,g[N];
void getmus()
{
mu[1]=1;
for(int i=2;i<=N;i++)
{
if(!st[i])
{
primes[++con]=i;
mu[i]=-1;
}
for(int j=1;primes[j]*i<=N;j++)
{
int t=primes[j]*i;
st[t]=1;
if(i%primes[j]==0)
{
break;
}
mu[t]=-mu[i];
}
}
for(int i=1;i<=N;i++)
{
int n=i;
int con=0;
while(n)
{
int d=n%10;
con+=d;
n/=10;
}
g[i]=con;
}
}
int main()
{
getmus();
int n;
cin>>n;
long long ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n/i;j++)
{
ans+=mu[i]*g[j*i]*(n/i-j+1);
}
}
cout<<ans<<endl;
return 0;
}