Pagini recente » Cod sursa (job #183922) | Cod sursa (job #3121597) | Cod sursa (job #1987793) | Cod sursa (job #492619) | Cod sursa (job #2615152)
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std ;
using namespace __gnu_pbds ;
struct custom_hash
{
static uint64_t splitmix64(uint64_t x) {
// http://xorshift.di.unimi.it/splitmix64.c
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const {
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
const int MAX = 1e4 ;
long long n, k ;
vector<long long>factors ;
gp_hash_table<long long, int , custom_hash>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 ;
}