結果

問題 No.2211 Frequency Table of GCD
ユーザー MasKoaTSMasKoaTS
提出日時 2023-02-10 23:24:03
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 3,435 bytes
コンパイル時間 4,924 ms
コンパイル使用メモリ 262,740 KB
実行使用メモリ 5,036 KB
最終ジャッジ日時 2023-09-22 00:26:16
合計ジャッジ時間 10,065 ms
ジャッジサーバーID
(参考情報)
judge14 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,380 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 RE -
testcase_04 RE -
testcase_05 RE -
testcase_06 RE -
testcase_07 RE -
testcase_08 RE -
testcase_09 WA -
testcase_10 RE -
testcase_11 RE -
testcase_12 RE -
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 RE -
testcase_17 RE -
testcase_18 RE -
testcase_19 RE -
testcase_20 RE -
testcase_21 RE -
testcase_22 RE -
testcase_23 RE -
testcase_24 RE -
testcase_25 WA -
testcase_26 AC 2 ms
4,380 KB
testcase_27 RE -
testcase_28 RE -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <math.h>
#include <bits/stdc++.h>
#include <atcoder/all>
#pragma warning(disable: 4996)
using namespace std;
using namespace atcoder;
#define print(n) cout << (n) << endl
#define fprint(n) cout << setprecision(16) << (n) << endl
#define ceil_div(a, b) (((a) - 1) / (b) + 1)
#define rep(i, l, n) for (int i = (l); i < (n); i++)
#define itrep(itr, st) for (auto itr = st.begin(); itr != st.end(); itr++)
#define ite(i, a) for (auto& i : a)
#define last(v) v[v.size() - 1]
#define all(x) x.begin(), x.end()
#define lb(A, x) (lower_bound(all(A), x) - A.begin())
#define ub(A, x) (upper_bound(all(A), x) - A.begin())
#define INF 4611686018427387903ll
#define inf 2147483647
#define mod 1000000007ll
#define MOD 998244353ll
using str = string;
using ll = long long;
using u32 = unsigned int;
using u64 = unsigned long long;
using Pair = pair<int, int>;
using mint = modint1000000007;
using Mint = modint998244353;
template <class T>	using V = vector<T>;
template <class T>	using VV = V<V<T> >;
template <class T>	using PQ = priority_queue<T, V<T>, greater<T> >;
template <class T>	using PQR = priority_queue<T>;
template <class T>	using BIT = fenwick_tree<T>;
template <class T>  inline V<T> getList(int n) { V<T> res(n); rep(i, 0, n) { cin >> res[i]; }return res; }
template <class T>  inline VV<T> getGrid(int m, int n) { VV<T> res(m, V<T>(n)); rep(i, 0, m) { res[i] = getList<T>(n); }return res; }
template <class T> inline void prints(V<T>& vec) { if (vec.size() == 0)return; cout << vec[0];	rep(i, 1, vec.size()) { cout << ' ' << vec[i]; } cout << '\n'; }
template<class T> inline vector<tuple<size_t, T> > enumerate(const vector<T>& values) { auto length = values.size(); auto values_with_indices = vector<tuple<size_t, T>>(length); for (size_t i = 0; i < length; ++i) { values_with_indices[i] = make_tuple(i, values[i]); } return values_with_indices; }
inline V<int> dtois(string& s) { V<int> vec = {}; ite(e, s) { vec.push_back(e - '0'); } return vec; }
inline V<int> atois(string& s) { V<int> vec = {}; ite(e, s) { vec.push_back(e - 'a'); } return vec; }
inline V<int> Atois(string& s) { V<int> vec = {}; ite(e, s) { vec.push_back(e - 'A'); } return vec; }

vector<pair<ll, ll> > primeFactorize(ll n) {
	vector<pair<ll, ll> > ret = {};
	ll cnt = 0;
	for (cnt; (n & 1) == 0; ++cnt) {
		n >>= 1;
	}
	if (cnt > 0) {
		ret.push_back({ 2,cnt });
	}
	for (ll f = 3; f * f <= n; f += 2) {
		cnt = 0;
		for (cnt; n % f == 0; ++cnt) {
			n /= f;
		}
		if (cnt > 0) {
			ret.push_back({ f,cnt });
		}
	}
	if (n > 1) {
		ret.push_back({ n,1 });
	}
	return ret;
}

ll powmod(ll a, ll n) {
	ll ret = 1;
	while (n) {
		if (n & 1) {
			ret *= a;
			ret %= MOD;
		}
		a *= a;
		a %= MOD;
		n >>= 1;
	}
	return ret;
}

int main(void) {
	int n, m;	cin >> n >> m;
	V<int> a = getList<int>(n);

	V<int> cnt(m + 1);
	for (int x : a) {
		if (x == 1) {
			cnt[1]++;
			continue;
		}
		V<pair<ll, ll> > prime = primeFactorize((ll)x);
		V<int> loop(prime.size());
		while (last(loop) < last(prime).second + 1) {
			int y = 1;
			rep(i, 0, loop.size()){
				rep(j, 0, loop[i]) {
					y *= prime[i].first;
				}
			}
			cnt[y]++;
			rep(i, 0, loop.size()) {
				if (loop[i] < prime[i].second + 1) {
					loop[i]++;
					break;
				}
				if (i == loop.size() - 1) {
					break;
				}
				loop[i] = 0;
			}
		}
	}

	// prints(cnt);
	rep(i, 1, m + 1) {
		if (cnt[i] == 0) {
			print(0);
			continue;
		}
		print(powmod(2, cnt[i] - 1));
	}

	return 0;
}
0