[海军国际项目办公室]乘法

Posted StaroForgin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[海军国际项目办公室]乘法相关的知识,希望对你有一定的参考价值。

乘法

题目概述


题解

显然,我们去掉末尾 0 0 0保留的最后 16 16 16位,转化成二进制位后末尾的 0 0 0不可能超过 3 3 3个,我们可以将原来 n ! n! n!中的 0 0 0全部去掉,最后在求出 0 0 0的个数,模 4 4 4后乘上。
既然,我们已经去掉所有的 2 2 2的倍数了,那么我们乘的肯定都是奇数,我们可以按照原数中含 2 2 2的个数分类,定义 f n = ∏ i ∈ [ 1 , n ] , 2 ∤ i i f_{n}=\\prod_{i\\in[1,n],2 \\nmid i}i fn=i[1,n],2ii,显然有
A n s = ∏ i = 0 log ⁡   n f n 2 i Ans=\\prod_{i=0}^{\\log\\,n}f_{\\frac{n}{2^i}} Ans=i=0lognf2in
我们考虑 f n f_n fn怎么算,显然我们的所有奇数都是可以用 2 k + 1 ( k ∈ N ) 2k+1(k\\in N) 2k+1(kN)的形式表示的,那么我们 f f f的式子可以写成,
f n = ∏ i = 0 ⌊ n − 1 2 ⌋ ( 2 i + 1 ) f_{n}=\\prod_{i=0}^{\\lfloor\\frac{n-1}{2}\\rfloor}(2i+1) fn=i=02n1(2i+1)
由于我们只会保留前面的 64 64 64位,我们可以将它看成一个多项式,令 x = 2 x=2 x=2,取模 x 64 x^{64} x64
F F F为该多项式,有,
F ( x ) = ∏ i = 0 ⌊ n − 1 2 ⌋ ( i x + 1 )    ( m o d    x 64 ) f = ∑ i = 0 63 2 i F [ x i ] F(x)=\\prod_{i=0}^{ \\lfloor\\frac{n-1}{2}\\rfloor}(ix+1)\\,\\,(\\mod x^{64})\\\\ f=\\sum_{i=0}^{63}2^iF[x^i] F(x)=i=02n1(ix+1)(modx64)f=i=0632iF[xi]
我们不妨记 u p = ⌊ n − 1 2 ⌋ up=\\lfloor\\frac{n-1}{2}\\rfloor up=2n1,记 g ( u p , i ) = ( ∏ i = 0 u p ( i x + 1 ) ) [ x i ] g(up,i)=(\\prod_{i=0}^{up}(ix+1))[x^i] g(up,i)=(i=0up(ix+1))[xi]
考虑如何快速地求出我们的 g ( u p , i ) [ i ∈ [ 0 , 63 ] ] g(up,i)[i\\in[0,63]] g(up,i)[i[0,63]]
考虑我们上面多项式系数的组合意义, F [ x i ] F[x^i] F[xi]相当于在 [ 1 , u p ] [1,up] [1,up]中选出 i i i个数,将每个方案中选出的数的积求和。
没有重复元素的无序序列的乘积,这就显然是可以背包求出的了。
我们考虑在前面的无序序列的最后加一个数,这数可能与前面的数重复,就需要容斥,枚举重复的元素个数,
g ( x , i ) = 1 i ∑ j = 1 i ( − 1 ) j − 1 g ( x , i − j ) ∑ y ∈ [ 1 , x ] y j g(x,i)=\\frac{1}{i}\\sum_{j=1}^{i}(-1)^{j-1}g(x,i-j)\\sum_{y\\in[1,x]}y^j g(x,i)=i1j=1i(1)j1g(x,ij)y[1,x]yj
该重复的数在 [ 1 , x ] [1,x] [1,x]中是什么都有可能,因为序列求的是乘积,所以我们肯定是将重复的数的幂与 g ( x , i − j ) g(x,i-j) g(x,ij)相乘,得到新的序列的乘积。
而不同的序列之间求的是加减,所以是幂和。
关于 ∑ y ∈ [ 1 , x ] y j \\sum_{y\\in[1,x]}y^j y[1,x]yj的求法,我们在微信步数中讲到过的,可以通过斯特林数反演求出,所以有,
g ( x , i ) = 1 i ∑ j = 1 i ( − 1 ) j − 1 g ( x , i − j ) ∑ k = 1 j k ! { j k } ( x + 1 k + 1 ) g(x,i)=\\frac{1}{i}\\sum_{j=1}^{i}(-1)^{j-1}g(x,i-j)\\sum_{k=1}^{j}k!{j\\brace k}\\binom{x+1}{k+1} g(x,i)=i1j=1i(1)j1g(x,ij)k=1jk!{kj}(k+1x+1)
后面的 ∑ k = 1 j k ! { j k } ( x + 1 k + 1 ) \\sum_{k=1}^{j}k!{j\\brace k}\\binom{x+1}{k+1} k=1jk!{kj

(c)2006-2024 SYSTEM All Rights Reserved IT常识