Pagini recente » Cod sursa (job #1798522) | Cod sursa (job #2293567) | Cod sursa (job #1125115) | Cod sursa (job #2761617) | Cod sursa (job #2615144)
#include <bits/stdc++.h>
using namespace std ;
const int MAX = 1e4 ;
long long n, k ;
vector<long long>factors ;
map<long long , int>pos ;
void factorize()
{
for(long long i = 1ll ; i * i <= n ; ++i)
{
if(n%i == 0)
{
factors.push_back(i) ;
if(n/i != i)
factors.push_back(n/i) ;
}
}
}
vector< vector<long long> >dp ;
long long solve(int now , int idx)
{
if(now == 0)
return 1ll ;
if(idx == factors.size())
return 0ll ;
long long &ret = dp[now][idx] ;
if(ret != -1)
return ret ;
ret = 0 ;
if(factors[now] % factors[idx] == 0)
ret += solve(pos[factors[now] / factors[idx]] , idx) ;
ret += solve(now , idx+1) ;
return ret ;
}
int main()
{
freopen("desc.in" , "r" , stdin) ;
freopen("desc.out" , "w" , stdout) ;
ios_base::sync_with_stdio(0) ;
cin.tie(0) ;
cin>>n>>k ;
if(n == 1)
return cout<<1<<"\n" , 0 ;
factorize() ;
sort(factors.begin() , factors.end()) ;
for(int i = 0 ; i < factors.size() ; ++i)
pos[factors[i]] = i ;
dp = vector< vector<long long> >(factors.size()+2 , vector<long long>(factors.size()+1 , -1)) ;
long long now = factors.size()-1 ;
cout<<solve(now , 0)<<"\n" ;
int last = 1 ;
while(now > 0)
{
for(int i = last ; i < factors.size() ; ++i)
{
if(factors[now] % factors[i] != 0)
continue ;
long long x = solve(pos[factors[now] / factors[i]] , i) ;
if(x >= k)
{
now = pos[factors[now] / factors[i]] ;
cout<<factors[i]<<" " ;
last = i ;
break ;
}
k -= x ;
}
}
cout<<"\n" ;
return 0 ;
}