Cod sursa(job #2615139)

Utilizator MohamedAhmed04Mohamed Ahmed Ali Mohamed Bakry MohamedAhmed04 Data 13 mai 2020 18:38:38
Problema Descompuneri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>

using namespace std ;

const int MAX = 7000 ;

long long n, k ;

vector<long long>factors ;

map<long long , int>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) ;
		}
	}
}

long long dp[MAX][MAX] ;

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()
{
	memset(dp , -1 , sizeof(dp)) ;
	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 ;
	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 ;
}