发现任意一个 (leq n!) 的数 (x) 都可以表现为以下形式:
[x=a_1 imes frac{n!}{1!}+a_2 imes frac{n!}{2!}+cdots + a_n imes frac{n!}{n!}
]
且 (a_ileq i)。直接输出 (a_i imes frac{n!}{i!}) 就行了。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
LL n, m;
void init()
{
scanf("%lld %lld", &n, &m);
}
void work()
{
LL fac = 1;
for (int i = 1; i <= n; i++)
fac=fac * i;
for (int i = 1; i <= n; i++)
{
fac /= i;
LL k = m / fac * fac;
if (k)
printf("%lld
", k);
m -= k;
}
}
int main()
{
init();
work();
return 0;
}