提出 #73459694


ソースコード 拡げる

#include <iostream>
#include <vector>
#include <map>
#include <atcoder/modint>
#define rep(i, n) for(i = 0; i < n; i++)
#define int long long
using namespace std;
using namespace atcoder;
using mint = modint998244353;

const int MAX = 10000001;
bool isPrime[MAX];
int minPrime[MAX];

void factorize(int x, vector<int> &ps, vector<int> &es) {
	int p = -1, e = 0;
	while (x > 1) {
		if (minPrime[x] != p) {
			if (p != -1) {
				ps.push_back(p);
				es.push_back(e);
			}
			p = minPrime[x];
			e = 0;
		}
		e++;
		x /= p;
	}
	ps.push_back(p);
	es.push_back(e);
}

vector<mint> solve(vector<int> a) {
	int i, j;
	int n = a.size();
	map<int, vector<int>> mp;	//(p, eの上位1,2番目)
	
	rep(i, n) {
		vector<int> ps, es;
		factorize(a[i], ps, es);
		rep(j, ps.size()) {
			int p = ps[j], e = es[j];
			vector<int> &vec = mp[p];
			vec.push_back(e);
			for (int k = (int)vec.size() - 2; k >= 0; k--) {
				if (vec[k] < vec[k + 1]) swap(vec[k], vec[k + 1]);
			}
			if (vec.size() == 3) vec.pop_back();
		}
	}

	mint all = 1;
	for (map<int, vector<int>>::iterator it = mp.begin(); it != mp.end(); it++) {
		int p = it->first, e = it->second[0];
		all *= mint(p).pow(e);
	}

	vector<mint> ret(n);
	rep(i, n) {
		vector<int> ps, es;
		factorize(a[i], ps, es);

		ret[i] = all;
		rep(j, ps.size()) {
			int p = ps[j], e = es[j];
			if (mp[p][0] == e) {
				int e2;
				if (mp[p].size() == 1) e2 = 0;
				else e2 = mp[p][1];
				ret[i] *= mint(p).pow(mp[p][0] - e2).inv();
			}
		}
	}
	return ret;
}

signed main() {
	int i, j;

	rep(i, MAX) isPrime[i] = true;
	for (i = 2; i < MAX; i++) {
		if (isPrime[i]) {
			minPrime[i] = i;
			for (j = 2 * i; j < MAX; j += i) {
				isPrime[j] = false;
				if (!minPrime[j]) minPrime[j] = i;
			}
		}
	}

	int T;
	cin >> T;
	while (T--) {
		int n; cin >> n;
		vector<int> a(n);
		rep(i, n) cin >> a[i];
		vector<mint> ans = solve(a);
		rep(i, n) {
			cout << ans[i].val();
			if (i + 1 < n) cout << " ";
		}
		cout << endl;
	}
	return 0;
}

提出情報

提出日時
問題 E - Many LCMs
ユーザ startcpp
言語 C++23 (GCC 15.2.0)
得点 475
コード長 2075 Byte
結果 AC
実行時間 549 ms
メモリ 116944 KiB

コンパイルエラー

./Main.cpp: In function 'std::vector<atcoder::static_modint<998244353> > solve(std::vector<long long int>)':
./Main.cpp:5:32: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    5 | #define rep(i, n) for(i = 0; i < n; i++)
      |                                ^
./Main.cpp:41:17: note: in expansion of macro 'rep'
   41 |                 rep(j, ps.size()) {
      |                 ^~~
./Main.cpp:5:32: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    5 | #define rep(i, n) for(i = 0; i < n; i++)
      |                                ^
./Main.cpp:64:17: note: in expansion of macro 'rep'
   64 |                 rep(j, ps.size()) {
      |                 ^~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 475 / 475
結果
AC × 1
AC × 25
セット名 テストケース
Sample 00_sample_01.txt
All 00_sample_01.txt, 01_large_t_01.txt, 01_large_t_02.txt, 01_large_t_03.txt, 02_large_n_01.txt, 02_large_n_02.txt, 02_large_n_03.txt, 03_prime_01.txt, 03_prime_02.txt, 03_prime_03.txt, 03_prime_04.txt, 03_prime_05.txt, 03_prime_06.txt, 04_small_prime_factor_01.txt, 04_small_prime_factor_02.txt, 04_small_prime_factor_03.txt, 04_small_prime_factor_04.txt, 04_small_prime_factor_05.txt, 04_small_prime_factor_06.txt, 05_large_value_01.txt, 05_large_value_02.txt, 05_large_value_03.txt, 05_large_value_04.txt, 05_large_value_05.txt, 05_large_value_06.txt
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 204 ms 91532 KiB
01_large_t_01.txt AC 484 ms 91316 KiB
01_large_t_02.txt AC 506 ms 91480 KiB
01_large_t_03.txt AC 507 ms 91500 KiB
02_large_n_01.txt AC 527 ms 95832 KiB
02_large_n_02.txt AC 514 ms 96784 KiB
02_large_n_03.txt AC 501 ms 100608 KiB
03_prime_01.txt AC 357 ms 91400 KiB
03_prime_02.txt AC 531 ms 114000 KiB
03_prime_03.txt AC 526 ms 114068 KiB
03_prime_04.txt AC 528 ms 113832 KiB
03_prime_05.txt AC 416 ms 103316 KiB
03_prime_06.txt AC 413 ms 103444 KiB
04_small_prime_factor_01.txt AC 549 ms 91400 KiB
04_small_prime_factor_02.txt AC 381 ms 94872 KiB
04_small_prime_factor_03.txt AC 381 ms 94876 KiB
04_small_prime_factor_04.txt AC 378 ms 95092 KiB
04_small_prime_factor_05.txt AC 465 ms 93136 KiB
04_small_prime_factor_06.txt AC 461 ms 93120 KiB
05_large_value_01.txt AC 469 ms 91320 KiB
05_large_value_02.txt AC 351 ms 91548 KiB
05_large_value_03.txt AC 509 ms 103944 KiB
05_large_value_04.txt AC 515 ms 116944 KiB
05_large_value_05.txt AC 478 ms 98048 KiB
05_large_value_06.txt AC 409 ms 104044 KiB