結果
| 問題 | No.3414 Aperiodic Sequence |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-12-21 18:59:06 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,578 bytes |
| 記録 | |
| コンパイル時間 | 5,230 ms |
| コンパイル使用メモリ | 334,940 KB |
| 実行使用メモリ | 13,816 KB |
| 最終ジャッジ日時 | 2025-12-21 18:59:18 |
| 合計ジャッジ時間 | 10,392 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 5 TLE * 1 -- * 9 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using mint = modint998244353;
int main() {
int n, m;
cin >> n >> m;
vector<int> v(n);
rep(i, n) cin >> v[i];
unordered_map<int,int> cnt;
rep(i, n) cnt[v[i]]++;
vector<mint> s(m+1);
for (auto [x, c] : cnt) {
mint p = x;
for (int i = 1; i <= m; ++i) {
s[i] += p*c;
p *= x;
}
}
vector<int> mu(m+1, 1), isp(m+1, 1);
vector<int> ps;
mu[0] = 1; mu[1] = 1;
for (int i = 2; i <= m; ++i) {
if (isp[i]) {
ps.push_back(i);
mu[i] = -1;
}
for (int p : ps) {
int j = p*i;
if (j > m) break;
isp[j] = 0;
if (i%p == 0) {
mu[j] = 0;
break;
}
else mu[j] = -mu[i];
}
}
vector<vector<int>> ds(m+1);
for (int i = 1; i <= m; ++i) {
for (int j = i; j <= m; j += i) {
ds[j].push_back(i);
}
}
vector<mint> ans(m+1);
for (int i = 1; i <= m; ++i) {
mint now;
for (int d : ds[i]) {
int k = i/d;
if (mu[k] == 0) continue;
if (s[k] == 0) continue;
mint t = s[k].pow(d);
if (mu[k] == 1) now += t; else now -= t;
}
ans[i] = now;
}
for (int i = 1; i <= m; ++i) cout << ans[i].val() << " \n"[i == m];
return 0;
}