欧拉降幂欧拉定理子序列权值乘积
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉降幂欧拉定理子序列权值乘积相关的知识,希望对你有一定的参考价值。
前置知识
欧拉定理
若 g c d ( a , m ) = 1 gcd(a,m)=1 gcd(a,m)=1,则 a φ ( m ) ≡ 1 ( m o d m ) a^\\varphi(m) \\equiv 1 \\pmodm aφ(m)≡1(modm)
扩展欧拉定理
a b ≡ a b m o d φ ( m ) , gcd ( a , m ) = 1 , a b , gcd ( a , m ) ≠ 1 , b < φ ( m ) , a ( b m o d φ ( m ) ) + φ ( m ) , gcd ( a , m ) ≠ 1 , b ≥ φ ( m ) . ( m o d m ) a^b \\equiv \\begincases a^b \\bmod \\varphi(m), &\\gcd(a,m) = 1, \\\\ a^b, &\\gcd(a,m)\\ne 1, b < \\varphi(m), \\\\ a^(b \\bmod \\varphi(m)) + \\varphi(m), &\\gcd(a,m)\\ne 1, b \\ge \\varphi(m). \\endcases \\pmod m ab≡⎩⎪⎨⎪⎧abmodφ(m),ab,a(bmodφ(m))+φ(m),gcd(a,m)=1,gcd(a,m)=1,b<φ(m),gcd(a,m)=1,b≥φ(m).(modm)
费马小定理
若p
为素数,
g
c
d
(
a
,
p
)
=
1
gcd(a,p)=1
gcd(a,p)=1,则
a
p
−
1
≡
1
(
m
o
d
p
)
a^p - 1 \\equiv 1 \\pmodp
ap−1≡1(modp)
注:若m
为素数,则
φ
(
m
)
=
m
−
1
\\varphi(m) = m-1
φ(m)=m−1
题目
题目链接:
https://ac.nowcoder.com/acm/contest/23479/G
给一个数组,求数组所有非空子序列的权值之积。
数组的权值:数组中的最大值乘最小值
长度为n
的数组,有
2
n
−
1
2^n-1
2n−1个非空子序列,枚举必然超时。
将数组排序,当排序了以后,如果确定了最大值和最小值,它们中间的数取不取对结果是没有影响的。
因此,通过这种方式可以枚举最大值和最小值,中间的部分规约在一起,利用欧拉降幂进行计算,这样复杂度为 O ( n 2 l o g n ) O(n^2logn) O(n2logn),这样还是不够。
如果区间长度 ( r − l + 1 ) (r-l+1) (r−l+1)为 k k k ,那么中间的数有【取】或【不取】两种状态,因此有 2 k − 2 2^k-2 2k−2的权值贡献。
对于长度固定的情况,那么贡献的次数固定。这部分可以利用乘法分配律合并起来。
这样最终只需要枚举区间长度就可以。
举例
以长度为5的数组举例 [ 1 , 2 , 3 , 4 , 5 ] [1,2,3,4,5] [1,2,3,4,5],假设已经排好序
- 枚举长度 2,最终带来的权值收益是
( 1 ∗ 2 ) 2 0 ∗ ( 2 ∗ 3 ) 2 0 ∗ ( 3 ∗ 4 ) 2 0 ∗ ( 4 ∗ 5 ) 2 0 (1*2)^2^0*(2*3)^2^0*(3*4)^2^0*(4*5)^2^0 (1∗2)20∗(2∗3)20∗(3∗4)20∗(4∗5)20
- 枚举长度 3,最终带来的权值收益是
( 1 ∗ 3 ) 2 1 ∗ ( 2 ∗ 4 ) 2 1 ∗ ( 3 ∗ 5 ) 2 1 (1*3)^2^1*(2*4)^2^1*(3*5)^2^1 (1∗3)21∗(2∗4)21∗(3∗5)21
- 枚举长度 4,最终带来的权值收益是
( 1 ∗ 4 ) 2 2 ∗ ( 2 ∗ 5 ) 2 2 (1*4)^2^2*(2*5)^2^2 (1∗4)22∗(2∗5)22
- 枚举长度 5,最终带来的权值收益是
( 1 ∗ 5 ) 2 3 (1*5)^2^3 (1∗5)23
根据公式 a t ∗ b t = ( a ∗ b ) t a^t*b^t=(a*b)^t at∗bt=(a∗b)t ,这些幂相同的底数都是可以合并的。
合并之后:
l
e
n
=
2
len=2
len=2时,
(
1
∗
2
2
∗
3
2
∗
4
2
∗
5
)
2
0
(1*2^2*3^2*4^2*5)^2^0
(1∗22∗32∗42∗5)20
l
e
n
=
3
len=3
len=3时,
(
1
∗
2
∗
3
2
∗
4
∗
5
)
2
1
(1*2*3^2*4*5)^2^1
(1∗2∗32∗4∗5)21
l
e
n
=
4
len=4
len=4时,
(
1
∗
2
∗
4
∗
5
)
2
2
(1*2*4*5)^2^2
(1∗2∗4∗5)22
l
e
n
=
5
len=5
len=5时,
(
1
∗
5
)
2
3
(1*5)^2^3
(1∗5)2以上是关于欧拉降幂欧拉定理子序列权值乘积的主要内容,如果未能解决你的问题,请参考以下文章