結果
問題 |
No.2963 Mecha DESU
|
ユーザー |
![]() |
提出日時 | 2024-12-29 10:14:20 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 259 ms / 2,000 ms |
コード長 | 1,456 bytes |
コンパイル時間 | 1,911 ms |
コンパイル使用メモリ | 168,672 KB |
実行使用メモリ | 19,072 KB |
最終ジャッジ日時 | 2024-12-29 10:14:31 |
合計ジャッジ時間 | 10,167 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 57 |
ソースコード
#include <bits/stdc++.h> #define FOR(i, a, b) for(ll i = (a); i < (b); i++) #define REP(i, a) FOR(i, 0, a) using namespace std; using ll = long long; const ll MOD = 998244353; struct mll{ ll x; mll(ll _x = 0){ x = (_x % MOD + MOD) % MOD; } }; ostream& operator<<(ostream &os, mll n){ os << n.x; return os; } mll operator +(mll a, mll b){ return mll(a.x + b.x); } mll operator -(mll a, mll b) { return mll(a.x - b.x); } void operator +=(mll &a, mll b) { a = a + b; } mll operator *(mll a, mll b){ return mll(a.x * b.x); } void operator *=(mll &a, mll b){ a = a * b; } mll mpw(mll n, ll m){ if(m < 0){ n = mpw(n, MOD - 2); m *= -1; } mll ret(1), p = n; while(m){ if(m & 1){ ret *= p; } p *= p; m >>= 1; } return ret; } mll minv(mll n){ return mpw(n, -1); } mll operator /(mll a, mll b){ return a * minv(b); } int main(){ ll N, M, K; scanf("%lld %lld %lld", &N, &M, &K); const ll MAX_A = 1000000; vector<ll> cnt_A(MAX_A + 1, 0), cnt(N + 1, 0); REP(i, M) { ll a; scanf("%lld", &a); ++cnt_A[a]; } mll ans(0), minv_M = minv(M); FOR(j, 1, N + 1) { for (ll i = j; i <= N; i += j) { cnt[i] += cnt_A[j]; } } FOR(i, 1, N + 1) { ans += mll(1) - mpw(mll(1) - mll(cnt[i]) * minv_M, K); } printf("%lld\n", ans.x); }