Re: DS
发表于 : 2023年 2月 25日 00:25
做了S(7)后,做S(2002)需要再加下面几项。但overflow很严重,是这题的一个卡点。64-bit的普通计算机没法处理2^64或以上的整数(20位或以上)。但搞数学计算或者相关专业的人应该能得心应手地处理吧?这些专业应该有常用工具做这种大整数运算,否则那种专业就太对不起学生了。本题特殊,只要求最低的16位,除法比较简单,最坏的overflow是34位(如果不做按照case的简化),因此还是可以写个个人程序处理这个问题的,但可能要稍微花点时间,需要拿学分的人去干。(这也许是个学校某专业的作业题吧?普通专业应该不会学怎样处理这类问题。)
对了,要保持一致的整数性,会有必要把最后面的那个乘法提前完成,因此2被提到了最前。还有就是:如果要算此类数的总数,只要把开始的那个2去掉,把最后那个乘数去掉,然后用那个(m,k)标识里的k*n代替它们,同样地进行计算即可。
长度8
11111117 (7,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)/7!*7
11111128 11111139 (17,2)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)/6!*17
11111229 (9,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)/5!/2!*9
长度9
111111118 (8,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)(n-8)/8!*8
111111129 (9,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)(n-8)/7!*9
长度10
1111111119 (9,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)(n-8)(n-9)/9!*9
对了,要保持一致的整数性,会有必要把最后面的那个乘法提前完成,因此2被提到了最前。还有就是:如果要算此类数的总数,只要把开始的那个2去掉,把最后那个乘数去掉,然后用那个(m,k)标识里的k*n代替它们,同样地进行计算即可。
长度8
11111117 (7,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)/7!*7
11111128 11111139 (17,2)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)/6!*17
11111229 (9,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)/5!/2!*9
长度9
111111118 (8,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)(n-8)/8!*8
111111129 (9,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)(n-8)/7!*9
长度10
1111111119 (9,1)
2(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)(n-8)(n-9)/9!*9