Pagini recente » Cod sursa (job #1525018) | Cod sursa (job #1763283) | Cod sursa (job #957086) | Cod sursa (job #1104251) | Cod sursa (job #532518)
Cod sursa(job #532518)
#include <algorithm>
#include <stdio.h>
#include <vector>
#define ll long long
#define MAX 2048
#define pb push_back
#define mp make_pair
using namespace std;
ll n, k, rez;
ll vctDiv[MAX];
int vctSol[MAX][MAX];
int main()
{
freopen("desc.in", "r", stdin);
freopen("desc.out", "w", stdout);
scanf("%lld %lld", &n, &k);
int m = 1;
vctDiv[0] = n;
for (int i = 2; i * i <= n; i++)
if (n % i == 0)
{
vctDiv[m++] = i;
if (i * i != n)
vctDiv[m++] = n / i;
}
sort(vctDiv, vctDiv + m);
/*
for (int i = 0; i < m; i++)
{
int r = 0;
vctSol[i][i] = 1;
for (int j = i; j >= 0; j--)
{
vctSol[i][j] = vctSol[i][j + 1];
if (vctDiv[i] % vctDiv[j] == 0)
{
for (; vctDiv[r] * vctDiv[j] < vctDiv[i]; r++);
vctSol[i][j] += vctSol[r][j];
}
}
}
printf("%d\n", vctSol[m - 1][0]);
int l = m - 1;
for (int i = 0; n > 1 && i < m; )
if (vctSol[l][i] - vctSol[l][i + 1] >= k)
{
printf("%lld ", vctDiv[i]);
n /= vctDiv[i];
if (n > 1)
for (; vctDiv[l] > n; l--);
}
else k -= vctSol[l][i] - vctSol[l][i + 1], i++;
*/
fclose(stdin);
fclose(stdout);
return 0;
}