#include <bits/stdc++.h>
using namespace std;
set<int> ans;
map<vector<array<int,2> > , bool> visited;
bool sito[100000];
void f(vector<array<int,2> > v)
{
int p = v.size()-1;
for (int i = 0;i<p;i++) {
if (v[i][1] == 0) swap(v[i],v[p]),p--;
}
while(v.back()[1] == 0) v.pop_back();
sort(v.begin(),v.end());
if (visited[v]) return;
visited[v] = true;
//for (auto a: v) cout<<a[0]<< " "<<a[1]<<",";cout<<endl;
int z = 0;
for (int i=0;i<v.size();i++)
{
z += (v[i][0]-1) * v[i][1];
if (v[i][1] > 1){
v.push_back({v[i][0]*v[i][0],1});
v[i][1]-=2;
f(v);
v.pop_back();
v[i][1]+=2;
}
for (int j=i+1;j<v.size();j++)
{
v.push_back({v[i][0]*v[j][0],1});
v[i][1]--;v[j][1]--;
f(v);
v.pop_back();
v[i][1]++;v[j][1]++;
}
}
ans.insert(z);
}
int main()
{
//f({{2,0},{3,4},{6,0},{5,1}});
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n;
cin>>n;
const int B = sqrt(n);
if (n == 1){
cout<<"1\n0"<<endl;
return 0;
}
for (int i=2;i<=B;i++){
if (sito[i]) continue;
for (int j=i*2;j<=B;j+=i) sito[j] = true;
}
//cout<<"mine\n";
vector<array<int,2> > v;
for (int i=2;i<=B;i++)
{
if (sito[i] == false && n%i == 0)
{
v.push_back({i,0});
while (n%i == 0){
n/=i;
v.back()[1]++;
}
}
}
if (n > 1) v.push_back({n,1});
//for (auto a: v) cout<<a[0]<<" "<<a[1]<<endl;cout<<"-\n";
f(v);
cout<<ans.size()<<"\n";
for (auto a: ans) cout<<a<<" ";
return 0;
}
# | 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... |