题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4916
第一个询问即求出$\sum_{i=1}^{n} { \mu (i^2)} $,考虑到$\mu$的定义,当i>1时必存在次数为偶数的质因子,故在数据范围内,$\sum_{i=1}^{n} { \mu (i^2)} $恒等于1。
第二个询问即求出$\sum_{i=1}^{n} { \varphi (i^2)} $,考虑到$\varphi$的定义,则有$\varphi(i^2)=i\times \varphi(i)$。
问题转化为求$\sum_{i=1}^{n} { i\times \varphi (i)} $
下面开始化简式子,考虑式子$n=\sum_{i|n}{\varphi (i)}$
通过简单变式,得:$n=\sum_{i|n\&i<n}{\varphi (i)}+\varphi (n)$
移项,得:$\varphi (n)=n-\sum_{i|n\&i<n}{\varphi (i)}$
通过之前推出的式子,得:$\mu(n^2)=n^2-n\times\sum_{i|n\&i<n}{\mu(i)}$
我们设$\Phi(n)=\sum_{i=1}^{n} { \varphi (i^2)}$
则:
$\Phi(n)=\sum_{i=1}^{n} (i^2-i \times \sum_{j|i\&j<i}\varphi(j))$
$=\frac{n(n+1)(2n+1)}{6}-\sum_{i=1}^{n} i \times \sum_{j|i\&j<i}\varphi(j)$
$=\frac{n(n+1)(2n+1)}{6}-\sum_{i=2}^{n} i \times \sum_{j=1}^{\left \lfloor \frac{n}{i} \right \rfloor}\varphi(j)\times j$
$=\frac{n(n+1)(2n+1)}{6}-\sum_{i=2}^{n} i \times \Phi(\left \lfloor \frac{n}{i} \right \rfloor)$
然后用杜教筛的思路+预处理1~19260817的$i\times \mu (i)$的前缀和即可
#include<bits/stdc++.h>
#define L long long
#define M 19260817
#define MOD 1000000007
#define inv6 166666668
using namespace std; int b[M]={},phi[M]={},use=; L pri[M]={};
void init(){
phi[]=;
for(int i=;i<M;i++){
if(!b[i]) pri[++use]=i,phi[i]=i-;
for(int j=;j<=use&&i*pri[j]<M;j++){
b[i*pri[j]]=;
if(i%pri[j]==) {phi[i*pri[j]]=phi[i]*pri[j]; break;}
phi[i*pri[j]]=phi[i]*(pri[j]-);
}
}
for(L i=;i<M;i++) phi[i]=(phi[i-]+phi[i]*i)%MOD;
} map<int,L> mp;
L solve(L n){
if(n<M) return phi[n];
if(mp[n]) return mp[n];
L pls=n*(n+)%MOD*(n<<|)%MOD*inv6%MOD,ans=;
for(L i=,j;i<=n;i=j+){
j=n/(n/i);
L sumi=((i+j)*(j-i+)/)%MOD;
ans=(ans+solve(n/i)%MOD*sumi)%MOD;
}
ans=(pls-ans+MOD)%MOD;
return mp[n]=ans;
} int main(){
init();
int n; scanf("%d",&n); printf("1\n");
printf("%lld\n",solve(n));
}