題目大意
解題思路
ans=∑ni=1∑d|i[(d,i/d)==1]
因爲2f(i) 相當於從i的質因子中考慮選不選進一個數裏,要麼選要麼不選,等同於拆成兩個互質的數。
ans=∑ni=1∑d|i∑p|d&&p|(i/d)[(d,i/d)==1]
如果(d,i/d)!=1那它約數的mu和爲0,如果是1則mu和爲1。
ans=∑ni=1∑p2|ig(i/p2)μ(p)
可以發現i的因子一定含有兩個p,而i的其他因子可以隨便組合成i的因數。
ans=∑sqrt(n)p=1μ(p)∑n/p2i=1g(i)
交換主體
ans=∑sqrt(n)p=1μ(p)∑n/p2i=1n/(p2i)
剩下的線篩加分快即可。
code
using namespace std;
LL const mn=1e6+9,mo=998244353;
LL n,ss[mn],tag[mn],mu[mn];
int main(){
scanf("%lld",&n);LL nn=sqrt(n);mu[1]=1;
fo(i,2,nn){
if(!tag[i])ss[++ss[0]]=i,mu[i]=-1;
fo(j,1,ss[0]){
if(i*ss[j]>nn)break;
tag[i*ss[j]]=1;
if(i%ss[j]==0){
mu[i*ss[j]]=0;
break;
}else mu[i*ss[j]]=-mu[i];
}
}
LL ans=0;
fo(i,1,nn){
LL mm=n/i/i;
for(LL j=1,k;j<=mm;j=k+1){
k=mm/(mm/j);
ans=(ans+mu[i]*mm/j%mo*((k-j+1)%mo))%mo;
}
}
printf("%lld",(ans+mo)%mo);
return 0;
}