#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
vector<vector<int>> vec[50];
int main(){
int n;
cin>>n;
vector<int> vc = {0}, v;
for (int i=2;i * i<=n;i++){
while (n % i == 0)
vc.push_back(i), n /= i;
}
if (n - 1)
vc.push_back(n);
vec[0] = {{}};
for (int i=1, c = 0;i<vc.size();i++){
if (vc[i] != vc[i-1])
c = 0;
c++;
for (int j = 0;j<vec[i-1].size();j++){
v = vec[i-1][j];
int cnt = 0;
for (int k=0;k<v.size();k++){
if (k == 0 or v[k-1] != v[k])
v[k] *= vc[i], vec[i].push_back(v), v[k] /= vc[i];
cnt += v[k] == vc[i];
}
if (cnt == c - 1)
v.push_back(vc[i]), vec[i].push_back(v);
}
if (i == vc.size() - 1)
continue;
sort(begin(vec[i]), end(vec[i]));
vec[i].resize(unique(begin(vec[i]), end(vec[i])) - vec[i].begin());
}
set<int> Ans;
for (auto vv : vec[vc.size() - 1]){
int sm = 0;
// cout<<"new :: ";
for (int j : vv)
sm += j - 1;//, cout<<j<<' ';
// cout<<endl;
Ans.insert(sm);
}
cout<<Ans.size()<<'\n';
for (int i : Ans)
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... |