結果
| 問題 |
No.2081 Make a Test Case of GCD Subset
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-09-26 07:32:24 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 4 ms / 2,000 ms |
| コード長 | 1,562 bytes |
| コンパイル時間 | 2,402 ms |
| コンパイル使用メモリ | 175,188 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-22 15:20:06 |
| 合計ジャッジ時間 | 6,357 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 27 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int mx = 100000;
vector<bool> tb(mx + 1, true);
vector<int> p;
for(int i = 2; i <= mx; i++){
if(!tb[i])continue;
p.push_back(i);
for(int j = 2 * i; j <= mx; j += i){
tb[j] = false;
}
}
int N;
cin >> N;
if(N == 0)N += 998244353;
vector<bool> used(p.size(), false);
vector<vector<int>> tb2(30);
int cnt = 29;
for(int i = 0; i < p.size() && cnt >= 0; i++){
if(used[i])continue;
ll v = p[i];
used[i] = true;
tb2[cnt].push_back(v);
if(cnt == 0)break;
while(tb2[cnt].size() < cnt && tb2[cnt].back() * v <= mx){
tb2[cnt].push_back(tb2[cnt].back() * v);
}
for(int j = p.size() - 1; j >= 0 && tb2[cnt].size() < cnt; j--){
if(used[j])continue;
if(v * p[j] > mx)continue;
used[j] = true;
tb2[cnt].push_back(v * p[j]);
}
for(int j = p.size() - 1; j >= 0; j--){
if(used[j])continue;
used[j] = true;
tb2[cnt].push_back(p[j]);
break;
}
cnt--;
}
vector<int> ans;
for(int i = 29; i >= 0; i--){
if(N >> i & 1){
ans.insert(ans.end(), tb2[i].begin(), tb2[i].end());
}
}
cout << ans.size() << '\n';
for(int i = 0; i < ans.size(); i++){
cout << ans[i] << (i + 1 == ans.size() ? '\n' : ' ');
}
}