#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; const ll MOD=998244353; const int MAX=1000010; bitset isprime; void sieve(){ for(int i=3; i>n; if(n==1){ cout<<8<> vd(sq+1); vector m(sq+1, 1); for(int d=1; d<=sq; d++){ if(!isprime[d]) continue; for(int i=d; i<=sq; i+=d){ if(i/d%d==0) m[i]=0; m[i]=-m[i]; } } ll x1=sq, ans=56; ll x[1000010]; for(ll i=2; i<=sq; i++){ while(x1*x1>n-i*i) x1--; x[i]=min(x1, i); } for(int d=1; d<=sq; d++){ for(int i=d; i<=sq; i+=d){ if(i==1) continue; ll y=x[i]/d; ll s=(((y*(y+1))>>1)*d%MOD+y*i)*48%MOD; if(m[d]==1) ans+=s; else if(m[d]==-1) ans+=MOD-s; if(ans>=MOD) ans-=MOD; } } cout<