Cod sursa(job #2643081)

Utilizator superj6Jason Gonzalez superj6 Data 18 august 2020 17:05:03
Problema Descompuneri Scor 32
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define endl '\n'
#define ll long long
#define pi pair<int, int>
#define f first
#define s second

const int mxn = 6720;
ll n, m, k;
ll a[mxn], dp[mxn];
unordered_map<ll, int> mp;

int main(){
	freopen("desc.in", "r", stdin);
	freopen("desc.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> m >> k;
	
	for(ll i = 1; i * i <= m; i++){
		if(m % i == 0){
			a[n++] = i;
			if(i * i != m) a[n++] = m / i;
		}
	}
	
	sort(a, a + n);
	for(int i = 0; i < n; i++) mp[a[i]] = i;
	
	dp[0] = 1;
	for(int i = 1; i < n; i++)
	for(int j = n - 1; ~j; j--)
	for(ll l = a[i]; mp.count(a[j] * l); l *= a[i]){
		dp[mp[a[j] * l]] += dp[j];
	}
	
	cout << dp[n - 1] << endl;
	return 0;
	
	k = dp[n - 1] - k + 1;
	for(int i = 1, c = n - 1; i < n && k; i++){
		for(int j = 0; j < n; j++)
		for(ll l = a[i]; mp.count(a[j] * l); l *= a[i]){
			dp[mp[a[j] * l]] -= dp[j];
		}
		for(; dp[c] < k; c = mp[a[c] / a[i]]){
			k -= dp[c];
			cout << a[i];
			if(k) cout << " ";
		}
	}
	cout << endl;

	return 0;
}