题目描述
给你正整数
n
n
n,求
∑
i
=
1
n
μ
(
i
2
)
f
(
n
)
=
∑
i
=
1
n
φ
(
i
2
)
\sum_{i=1}^{n}\mu(i^2)\\ f(n)=\sum_{i=1}^{n}\varphi(i^2)
i=1∑nμ(i2)f(n)=i=1∑nφ(i2)的值。
Solution
首先,第一行是搞笑的,因为 ∀ i ∈ [ 2 , ∞ ) \forall i\in[2,\infty) ∀i∈[2,∞) 都有 μ ( i 2 ) = 0 \mu(i^2)=0 μ(i2)=0,所以第一行的值为 1 1 1。
然后看第二行。知道
φ
(
i
2
)
=
i
×
φ
(
i
)
\varphi(i^2)=i\times\varphi(i)
φ(i2)=i×φ(i)。设
g
(
x
)
=
x
,
h
(
x
)
=
x
2
g(x)=x,h(x)=x^2
g(x)=x,h(x)=x2,则有
f
∗
g
=
h
f*g=h
f∗g=h
设
S
(
x
)
=
∑
i
=
1
x
f
(
i
)
S(x)=\sum_{i=1}^{x}f(i)
S(x)=i=1∑xf(i)根据 杜教筛的套路式,有
g
(
1
)
S
(
n
)
=
∑
i
=
1
n
h
(
i
)
−
∑
i
=
2
n
g
(
i
)
S
(
n
i
)
g(1)S(n)=\sum_{i=1}^{n}h(i)-\sum_{i=2}^{n}g(i)S(\frac ni)
g(1)S(n)=i=1∑nh(i)−i=2∑ng(i)S(in)即
S
(
n
)
=
n
(
n
+
1
)
(
2
n
+
1
)
6
−
∑
i
=
2
n
i
⋅
S
(
n
i
)
S(n)=\frac{n(n+1)(2n+1)}6-\sum_{i=2}^{n}i·S(\frac ni)
S(n)=6n(n+1)(2n+1)−i=2∑ni⋅S(in)
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<map>
#define reg register
typedef long long ll;
const int MAXN=500;
const int MOD=1000000007;
ll n;
int len=0;
int p[MAXN+10];
bool vis[MAXN+10];
int phi[MAXN+10];
ll S_phi[MAXN+10];
ll inv6;
std::map<ll,ll>mp;
ll pow(ll x,int y){
if(!y) return 1;
ll c=pow(x,y/2)%MOD;
if(y&1) return (c*c)%MOD*x%MOD;
return (c*c)%MOD;
}
void init(){
memset(vis,1,sizeof(vis));phi[1]=1;
for(reg int i=2;i<=MAXN;++i){
if(vis[i]){
p[++len]=i;
phi[i]=i-1;
}
for(reg int j=1;i*p[j]<=MAXN&&j<=len;++j){
vis[i*p[j]]=0;
if(i%p[j])
phi[i*p[j]]=phi[i]*(p[j]-1);
else{
phi[i*p[j]]=phi[i]*p[j];
break;
}
}
}
S_phi[0]=0;
for(reg int i=1;i<=MAXN;++i){
phi[i]%=MOD;
S_phi[i]=(S_phi[i-1]+(ll)i*phi[i]%MOD)%MOD;
}
inv6=pow(6,MOD-2);
}
ll F(ll x){
return (ll)x*(x+1)%MOD*(x+x+1)%MOD*inv6%MOD;
}
ll C(ll l,ll r){
return (l+r)*(r-l+1)/2%MOD;
}
ll S(ll x){
if(x<MAXN) return S_phi[x];
if(mp[x]) return mp[x];
ll sum=0;
for(reg ll l=2,r;l<=x;l=r+1){
r=x/(x/l);
sum=(sum+S(x/l)*C(l,r)%MOD)%MOD;
}
return mp[x]=((F(x)-sum+MOD)%MOD);
}
int main(){
init();
scanf("%lld",&n);
printf("1\n%lld",S(n));
}