제출 #679136

#제출 시각아이디문제언어결과실행 시간메모리
679136KiprasToys (CEOI18_toy)C++17
79 / 100
5072 ms101652 KiB
#include <bits/stdc++.h>

typedef long long ll;

using namespace std;

ll sum = 0;
ll mult=1;
ll n;

set<ll> res;
vector<ll> divv;

map<pair<ll, ll>, bool> hasBeen;

void gen(ll k, ll last){

    //cout<<k<<" "<<sum<<" "<<mult<<endl;

    if(hasBeen[{mult, sum}]){
        return;
    }

    hasBeen[{mult, sum}]=1;

    if(mult==n){
        res.insert(sum);
        return;
    }

    for(auto i : divv){
        //cout<<i<<" "<<mult*i<<" "<<n%(mult*i)<<endl;
        if(i<last)continue;
        if(mult*i<=n&&n%(mult*i)==0){
            sum+=i-1;
            mult*=i;
            gen(k+1, i);
            sum-=i-1;
            mult/=i;
        }
    }


}

int main()
{

    ios_base::sync_with_stdio(0);cin.tie(nullptr);

    cin>>n;

    for(int i = 1; i*i <= n; i++){
        if(n%i==0){
            divv.push_back(i);
            if(n/i!=i)divv.push_back(n/i);
        }
    }

    gen(0, 0);

    cout<<res.size()<<"\n";
    for(auto i : res){
        cout<<i<<" ";
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...