# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
679133 | 2023-01-07T14:43:02 Z | Kipras | Toys (CEOI18_toy) | C++17 | 0 ms | 0 KB |
#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){ //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(mult*i<=n&&n%(mult*i)==0){ sum+=i-1; mult*=i; gen(k+1); 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); cout<<res.size()<<"\n"; for(auto i : res){ cout<<i<<" "; } return 0; }