Cod sursa(job #2615184)

Utilizator MohamedAhmed04Mohamed Ahmed Ali Mohamed Bakry MohamedAhmed04 Data 13 mai 2020 19:49:59
Problema Descompuneri Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#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 ;
}