这是一道很恶心的数学题.......
我参考了这个人的题解
分析:
对于任意[n*n,(n+1)*(n+1)) 里的元素来说,需要%n == 0 才符合题意
分析这其中的元素
- n*n < (n+1)*(n+1) && (n+1)*(n+1) % n == 0
- n*(n + 1) < (n+1)*(n+1) && (n+1)*(n+1) % n == 0
- n*(n + 2) < (n+1)*(n+1) && (n+1)*(n+1) % n == 0
一个值最多有三个
和为n * (3n +3)
n 从 1 到 根号 X 也就是
n(n+1)(n+2)
#include <iostream>
#include <cmath>
using namespace std;
using ll = long long;
ll N = 998244353;
int main() {
int t; cin >> t;
while (t--) {
ll x; cin >> x;
ll n = (ll)sqrt(x + 1); // 取整
ll ret = (n - 1) * n % N * (n + 1) % N; // 前面完整的情况
// 不完整情况
int i = 0;
while (n * (n + i) <= x)
ret = (ret + n * (n + i++) ) % N;
cout << ret << endl;
}
}