如题,思路参照了官方题解
但是它WA掉了,请问哪里有锅,谢谢。
#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
const int MAXN=1e6+10;
long long ans=1;
long long n;
vector<long long> d;
void fj(){
for(long long i=1;i<sqrt(n);i++){
if(n%i==0){
d.push_back(i);
d.push_back(n/i);
}
}
long long x=sqrt(n);
if(x*x==n)d.push_back(x);
}
long long g[MAXN];
int main(){
cin>>n;
n--;
fj();
sort(d.begin(),d.end());
//for(int i=0;i<d.size();i++)cout<<d[i]<<" ";
for(int i=d.size()-1;i>=0;i--){
g[i]=n/d[i];
g[i]%=mod;
for(int j=i+1;j<d.size();j++){
if(d[j]%d[i]==0){
g[i]=(g[i]+mod-g[j])%mod;
}
}
}
//for(int i=0;i<d.size();i++)cout<<g[i]<<endl;
for(int i=0;i<d.size();i++){
ans+=n/d[i]*g[i];
ans%=mod;
}
cout<<ans<<endl;
}