用户输出
2
系统信息
Exited with return code 0
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#45514 | #1243. zxh的高等数学 | Accepted | 100 | 6847 ms | 368 K | C++ 17 / 1.7 K | q3540555 | 2020-08-02 1:34:42 |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double lw;
const int p = 998244353;
ll n, ans, bt = -1;
ll qp(ll x, ll y) {
ll res = 1;
while (y) {
if (y & 1)
res = (res * x) % p;
x = (x * x) % p;
y >>= 1;
}
return res;
}
const string opt = "./testcases/1243/", nme[2] = { ".in", ".out" };
int main() {
// ofstream logf(opt + "log.txt");
// for (int ss = 1; ss <= 75; ++ss)
//{
// freopen((opt + to_string(ss) + nme[0]).c_str(), "r", stdin);
// freopen((opt + to_string(ss) + nme[1]).c_str(), "w", stdout);
// ll ct = clock();
scanf("%lld", &n), ans = 0, bt = -1;
for (ll i = 2; i <= n; i++) {
if (i * i > n) {
bt = i;
break;
}
ll m = log2(lw(n)) / log2(lw(i));
ll sub = (qp(i - 1, p - 2) * i) % p * (qp(i, m) + p - 1), add = (n + 1) % p * m;
ans += ((((add % p) - (sub % p)) % p + p) % p) * i, ans %= p;
}
if (bt > 0) {
ll pa = (bt + n) % p, pb = n % p, pc = bt - 1;
pa *= (n - bt + 1) % p, pa %= p, pa *= (n + 1) % p, pa %= p, pa *= qp(2, p - 2), pa %= p;
pb *= (n + 1) % p, pb %= p, pb *= (2 * n + 1) % p, pb %= p, pb *= qp(6, p - 2), pb %= p;
pc *= bt, pc %= p, pc *= (2 * bt - 1), pc %= p, pc *= qp(6, p - 2), pc %= p;
ans += pa, ans %= p, ans -= pb, ans %= p, ans += pc, ans %= p;
}
ans += p, ans %= p;
printf("%lld", ans);
// ct = clock() - ct;
// cerr << "Test Cases " << ss << " Finished! " << ct << "ms past.\n";
//}
return 0;
}