結果
問題 |
No.2902 ZERO!!
|
ユーザー |
👑 ![]() |
提出日時 | 2024-08-20 08:23:32 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 53 ms / 2,000 ms |
コード長 | 836 bytes |
コンパイル時間 | 793 ms |
コンパイル使用メモリ | 80,152 KB |
最終ジャッジ日時 | 2025-02-23 23:11:02 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 |
ソースコード
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <atcoder/modint> using i64 = long long; using Modint = atcoder::static_modint<998244353>; using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector<i64> isPrime(N+1, 1); isPrime[0] = isPrime[1] = 0; for(i64 k=2; k*k<=N; k++) if(isPrime[k]){ for(i64 q=k*k; q<=N; q+=k) isPrime[q] = 0; } vector<i64> A; for(i64 k=2; k<=N; k++) if(isPrime[k]){ i64 t = N; i64 c = 0; while(t){ c += (t /= k); } A.push_back(c); } vector<Modint> Q(A[0]+1, 1); for(i64 a : A) for(i64 c=1; c<=a; c++) Q[c] *= a/c+1; Modint ans = 0; for(i64 a=1; a<=A[0]; a++) ans += Q[a]; ans -= A[0]; cout << ans.val() << endl; return 0; }