Pagini recente » Cod sursa (job #3167365) | Cod sursa (job #1944575) | Cod sursa (job #2979365) | Cod sursa (job #1642735) | Cod sursa (job #2581415)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream f("desc.in");
ofstream g("desc.out");
ll n,k,dp[4095][4095];
vector<pair <ll ,ll> > divizori[4095];
vector<ll> diviz;
void perechidiv(int i)
{
int l=1,r=i;
ll val=diviz[i];
while(l<=r)
{
if(1LL*diviz[l]*diviz[r]==val) {divizori[i].push_back({l,r});l++;r--;}
else
{
if(1LL*diviz[l]*diviz[r]>val) r--;
else l++;
}
}
divizori[i].push_back({i,0});
}
void faperm(int divcurent,int lastdiv,ll k)
{
if(lastdiv==0) return;
if(lastdiv!=-1) g<<diviz[lastdiv]<<" ";
int m=divizori[divcurent].size();
ll cnt=0,copiecnt,rasp;
for(int i=0;i<m;i++)
{
if(divizori[divcurent][i].first>=lastdiv)
{
cnt=dp[divcurent][divizori[divcurent][i].first];
if(cnt>=k) {faperm(divizori[divcurent][i].second,divizori[divcurent][i].first,k);break;}
else
{
k-=cnt;
}
}
}
}
int main()
{
f>>n>>k;
for(int i=1;1LL*i*i<=n;i++)
{
if(n%i==0)
{
if(n/i!=i)
{
diviz.push_back(i);
diviz.push_back(n/i);
}
else
diviz.push_back(i);
}
}
sort(diviz.begin(),diviz.end());
int z=diviz.size();
for(int i=0;i<z;i++)
{
perechidiv(i);
dp[i][i]=1;
}
dp[0][0]=1;
//int z=diviz.size();
for(int i=1;i<z;i++)
{ll sol=0;
//cout<<diviz[i]<<" ";
int m=divizori[i].size();
for(int j=0;j<m;j++)
{///calculcam dp[i][x];
ll val=divizori[i][j].second;
int x=divizori[i][j].first;
int cnt=divizori[val].size();
if(val!=0){
for(int d=cnt-1;d>=0;d--)
{
if(divizori[val][d].first>=x)
{
dp[i][x]+=dp[val][divizori[val][d].first];
}
}
}
sol+=dp[i][x];
}
if(i==z-1){
g<<sol<<'\n';
}
}
faperm(diviz.size()-1,-1,k);
}