F.Function!
#include <bits/stdc++.h>
#pragma GCC optimize(3 , "Ofast" , "inline")
using namespace std;
typedef long long ll ;
const int INF = 0x3f3f3f3f , N = 1e5 + 10 ;
const int mod = 998244353 ;
void read(ll &x)
{
x = 0 ;
char c = getchar() ;
while(!isdigit(c)) c = getchar() ;
while(isdigit(c)) x = x * 10 + c - 48 , c = getchar() ;
}
ll qmi(ll a , ll b)
{
ll res = 1;
while(b)
{
if(b & 1) res = res * a % mod ;
a = a * a % mod ;
b >>= 1 ;
}
return res ;
}
ll get(ll x)
{
x %= mod ;
return x % mod * (x + 1) % mod * (2 * x + 1) % mod * qmi(6 , mod - 2) % mod ;
}
int main()
{
ll n ;
read(n) ;
ll ans = 0 ;
for(ll i = 2 ; i <= n ;i ++)
{
ll res = 1 ;
if(i * i > n)
{
ll q = n % mod ;
n %= mod ;
ans = (ans + (n + 1) % mod * (n + i) % mod * (n - i % mod + 1 + mod) % mod * qmi(2 , mod - 2) % mod ) % mod;
// ans = (ans + (n + 1) % mod * (i + n) % mod * (n - i % mod + 1 + mod) % mod * qmi(2 , mod - 2) % mod ) % mod;
ans = (ans - (get(n) - get(i - 1) + 10ll * mod) % mod + 10ll * mod) % mod ;
break ;
}
else
{
for(ll l = i , temp = 0 ;l <= n ;l = res , temp ++ )
{
res *= i ;
if(res > n)
{
ans = (ans + i % mod * temp % mod * (n % mod - l + 1 + mod) % mod) % mod ;
break ;
}
else
{
ans = (ans + i % mod * temp % mod * (res % mod - l + mod) % mod) % mod ;
}
}
}
}
cout << ans << endl ;
return 0 ;
}
每次做题提醒自己:题目到底有没有读懂,有没有分析彻底、算法够不够贪心、暴力够不够优雅。