Cod sursa(job #2615161)

Utilizator MohamedAhmed04Mohamed Ahmed Ali Mohamed Bakry MohamedAhmed04 Data 13 mai 2020 19:02:21
Problema Descompuneri Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#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)
{
	int idx = lower_bound(factors.begin() , factors.end() , x) - factors.begin() ;
	assert(factors[idx] == x) ;
	return 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(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 ;
}