Pagini recente » Cod sursa (job #2307585) | Cod sursa (job #2703839) | Cod sursa (job #1609209) | Cod sursa (job #1573294) | Cod sursa (job #2615158)
#include <bits/stdc++.h>
using namespace std ;
const int MAX = 1e4 ;
int n, k ;
vector<long long>factors ;
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<int> >dp ;
int pos(long long x)
{
return lower_bound(factors.begin() , factors.end() , x) - factors.begin() ;
}
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(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()) ;
dp = vector< vector<int> >(factors.size()+2 , vector<int>(factors.size()+1 , -1)) ;
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(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 ;
}