이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
// #define int long long
set<int> ans;
vector<int> divisor;
void compute(int n,int min_d,int sm){
// if(sm<=ans.back())
// return;
// cout<<n<<' '<<min_d<<' '<<sm<<endl;
if(n==1){
ans.insert(sm);
// cout<<"This is one of them : ";
// cout<<sm<<endl;
return;
}
// // cout<<n<<' '<<max/d<<' '<<sm<<endl;
// // return;
// for(auto d:divisor){
// if(d>n)
// break;
// if(n%d!=0 || d<min_d)
// continue;
// compute(n/d,d,sm+(d-1));
// }
for(int i=1;i*i<=n;i++){
if(n%i==0){
if(i>=min_d)
compute(n/i,i,sm+(i-1));
if(i!=n/i && (n/i)>=min_d)
compute(n/(n/i),n/i,sm+((n/i)-1));
}
}
}
signed main(){
int n;
cin>>n;
divisor.push_back(n);
for(int i=2;i*i<=n;i++){
if(n%i==0){
divisor.push_back(i);
if((n/i)!=i)
divisor.push_back(n/i);
}
}
sort(divisor.begin(),divisor.end());
// for(auto i:divisor)
// cout<<i<<endl;
compute(n,2,0);
cout<<ans.size()<<endl;
for(auto i:ans)
cout<<i<<' ';
cout<<endl;
}
# | 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... |