Pagini recente » Cod sursa (job #2303350) | Cod sursa (job #2482932) | Cod sursa (job #2357446) | Cod sursa (job #793913) | Cod sursa (job #2615184)
#include <bits/stdc++.h>
using namespace std ;
const int MAX = 1e4 ;
long long n, k ;
vector<long long>factors ;
vector< vector<int> >dp , 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) ;
}
}
}
void preprocess()
{
for(int i = factors.size()-1 ; i >= 0 ; --i)
{
int idx = i ;
for(int j = 0 ; j < factors.size() ; ++j)
{
if(factors[i] % factors[j] != 0)
continue ;
while(factors[idx] * factors[j] > factors[i])
idx-- ;
pos[i][j] = idx ;
}
}
}
int solve(int now , int idx)
{
if(now == 0)
return 1 ;
if(idx == factors.size())
return 0 ;
int &ret = dp[now][idx] ;
if(ret != -1)
return ret ;
ret = 0 ;
if(pos[now][idx] != -1)
ret += solve(pos[now][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()) ;
dp = vector< vector<int> >(factors.size()+2 , vector<int>(factors.size()+1 , -1)) ;
pos = vector< vector<int> >(factors.size()+2 , vector<int>(factors.size()+1 , -1)) ;
preprocess() ;
int 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 ;
int x = solve(pos[now][i] , i) ;
if(x >= k)
{
now = pos[now][i] ;
cout<<factors[i]<<" " ;
last = i ;
break ;
}
k -= x ;
}
}
cout<<"\n" ;
return 0 ;
}