#109. czq的全排列打印机

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: Rhodoks

题目描述

数据范围是做题时需要着重考虑的地方,除了数组的大小需要依此确定之外,数据类型的选用也应当和题目要求吻合。

例如,如果变量的值可能大于等于,就不能使用int类型而需要转而使用long long类型,有时甚至需要加上unsigned修饰以获取非负数范围内更大的范围(针对C/C++)。

当然,有些人会打算使用浮点数取代整型数来取巧:看上去浮点数的表示范围比整型大多了。但天下没有免费的午餐,在类型大小相同的情况下,浮点类型的精度反而比整型还要低得多。浮点数运算的结果是不准确的(浮点误差),这往往意味着 WA

此外,在编写程序时,也应当时刻注意类型间的运算,比如以下语句:

long long ans;
int a = 114514;
int b = 1919810;
ans=a*b;

尽管存储结果的变量使用了64位有符号整数,但是运算数是以32位有符号整型的形式进行运算的,这意味着在赋值之前,乘法运算就已经溢出了。

一种可行的改正方法是,将a,b都声明为long long。或者将最后一句写成这样:ans=(long long)a*b,这种写法强制将a转化为64位有符号整数,当它与32位有符号整数相乘时,会自动以更高精度的类型进行运算。

此外,即使输入数据和答案都保证在int范围内,也需要留意中间值超过上界的情况。

如果你使用的是python等语言,你或许可以稍稍松了口气,因为它是自带大整数的(但是取而代之的你需要考虑程序的时间效率问题)。


我们称一个长度为的整数数组,满足为一个长度为的全排列。例如是长度为3的全排列,而不是全排列。

现在czq想把所有长度为的全排列打印出来,他有台打印机,每台打印机每秒可以打印一个排列。多台打印机可以自由地并行打印,请问最少需要多少秒可以打印完所有的全排列。

输入格式

输入仅一行,有两个整数,由空格分开。

输出格式

仅一个整数,为答案。

样例

样例输入

4 9

样例输出

3

数据范围与提示

保证答案不超过

提示:

长度为的全排列有个。

答案在int范围内,但是阶乘的结果呢?