This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
vector<int> factors;
vector<vector<int> > adj;
vector<set<int> > factorsSubtree;
void dfs(int u){
for(int v : adj[u]){
dfs(v);
factorsSubtree[u].insert(v);
for(int a : factorsSubtree[v]){
factorsSubtree[u].insert(a);
}
}
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= sqrt(n); i++){
if(n % i == 0){
factors.push_back(i);
if(i * i != n){
factors.push_back(n/i);
}
}
}
sort(factors.begin(), factors.end());
adj.resize((int)factors.size());
for(int i = 0; i < (int)factors.size(); i++){
for(int j = i + 1; j < (int)factors.size(); j++){
if(factors[j] % factors[i] == 0){
adj[j].push_back(i);
}
}
}
factorsSubtree.resize((int)factors.size());
dfs((int)factors.size() - 1);
vector<set<int> > dp((int)factors.size());
for(int i = 0; i < (int)factors.size(); i++){
dp[i].insert(factors[i] - 1);
for(int x : factorsSubtree[i]){
for(int y : dp[x]){
dp[i].insert(factors[i]/factors[x] - 1 + y);
}
}
}
cout << dp.back().size() << "\n";
for(int i : dp.back()){
cout << i << " ";
}
cout << "\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |