反演定理及其应用_反演定理的证明

反演定理及其应用_反演定理的证明一、莫比乌斯反演莫比乌斯反演公式:若F(n)=∑i|nf(i)F(n)=∑i|nf(i)F(n)=\sum_{i|n}f(i)则f(n)=∑i|nμ(i)F(ni)f(n)=∑i|nμ(i)F(ni)f(n)=\sum_{i|n}\mu(i)F(\frac{n}{i})为什么呢?请看证明:由于莫比乌斯函数具有性质∑i|nμ(i)=[n=1]∑i|nμ(i)=[n=1]\…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

一、莫比乌斯反演

莫比乌斯反演公式:

F(n)=i|nf(i) F ( n ) = ∑ i | n f ( i )






f(n)=i|nμ(i)F(ni) f ( n ) = ∑ i | n μ ( i ) F ( n i )



为什么呢?请看证明:

由于莫比乌斯函数具有性质

i|nμ(i)=[n=1] ∑ i | n μ ( i ) = [ n = 1 ]
,因此我们考虑把原式带入:


i|nμ(i)j|nif(i)=j|nf(j)i|njμ(i)=j|nf(j)[nj=1]=f(n) ∑ i | n μ ( i ) ∑ j | n i f ( i ) = ∑ j | n f ( j ) ∑ i | n j μ ( i ) = ∑ j | n f ( j ) [ n j = 1 ] = f ( n )



证毕。

莫比乌斯反演的另一种形式:




F(n)=n|if(i) F ( n ) = ∑ n | i f ( i )






f(n)=n|iμ(in)F(i) f ( n ) = ∑ n | i μ ( i n ) F ( i )



证明过程与上面的相仿。

例题:BZOJ1101

给定 n,mi=1nj=1m[gcd(i,j)=k] n , m , 求 ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ]

f(k)=i=1nj=1m[gcd(i,j)=k] f ( k ) = ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ]


F(k)=k|if(i)=i=1nj=1m[k|gcd(i,j)]=nkmk F ( k ) = ∑ k | i f ( i ) = ∑ i = 1 n ∑ j = 1 m [ k | g c d ( i , j ) ] = ⌊ n k ⌋ ⌊ m k ⌋



则根据莫比乌斯反演定理,


f(k)=k|iμ(ik)F(i)=k|iμ(ik)nimi=i=1n/kμ(i)nkimki f ( k ) = ∑ k | i μ ( i k ) F ( i ) = ∑ k | i μ ( i k ) ⌊ n i ⌋ ⌊ m i ⌋ = ∑ i = 1 n / k μ ( i ) ⌊ n k i ⌋ ⌊ m k i ⌋



于是变成了一个很显然的整除分块,复杂度

O(Tn) O ( T n )

二、二项式反演

F(n)=i=pn(ni)f(i) F ( n ) = ∑ i = p n ( n i ) f ( i )




f(n)=i=pn(1)ni(ni)F(i) f ( n ) = ∑ i = p n ( − 1 ) n − i ( n i ) F ( i )



证明如下:


i=pn(1)ni(ni)F(i)=i=pn(1)ni(ni)j=pn(ij)f(j)=j=pnf(j)i=jn(1)ni(ni)(ij)=j=pnf(j)(nj)i=jn(1)ni(njij)=j=pnf(j)(nj)i=0nj(1)nji(nji)=j=pnf(j)(nj)0nj ∑ i = p n ( − 1 ) n − i ( n i ) F ( i ) = ∑ i = p n ( − 1 ) n − i ( n i ) ∑ j = p n ( i j ) f ( j ) = ∑ j = p n f ( j ) ∑ i = j n ( − 1 ) n − i ( n i ) ( i j ) = ∑ j = p n f ( j ) ( n j ) ∑ i = j n ( − 1 ) n − i ( n − j i − j ) = ∑ j = p n f ( j ) ( n j ) ∑ i = 0 n − j ( − 1 ) n − j − i ( n − j i ) = ∑ j = p n f ( j ) ( n j ) · 0 n − j



最后一步是逆用二项式定理,展开

(11)nj ( 1 − 1 ) n − j
,发现只有当

n=j n = j


0nj=1 0 n − j = 1
,因此


j=pnf(j)(nj)0nj=f(n) ∑ j = p n f ( j ) ( n j ) · 0 n − j = f ( n )



证毕。

另一种形式:若


g(m)=i=mn(im)f(i) g ( m ) = ∑ i = m n ( i m ) f ( i )


f(m)=i=mn(1)im(im)g(i) f ( m ) = ∑ i = m n ( − 1 ) i − m ( i m ) g ( i )



证明过程与上述过程相仿

例题

染色问题

有n个格子排成一排,用 m(m2) m ( m ≥ 2 ) 种颜色染色,求使得相邻格子不能染上相同颜色,且每种颜色都要用上的染色方案数。 (m100,000,n109) ( m ≤ 100 , 000 , n ≤ 10 9 )
直接计算不好处理,考虑去掉某个限制条件。设 f(m) f ( m ) 为原题答案, g(m) g ( m ) 为相同格子不能染上相同颜色,至多用m种的染色方案,则显然有 g(m)=m(m1)n1 g ( m ) = m ( m − 1 ) n − 1 。我们考虑使用 f f 计算出
g


g

,可以枚举具体使用了哪些颜色,则:

g(m)=i=2m(mi)f(i) g ( m ) = ∑ i = 2 m ( m i ) f ( i )



根据二项式反演,我们就可以得到:


f(m)=i=2m(1)mi(mi)g(i)=i=2m(1)mi(mi)i(i1)n1 f ( m ) = ∑ i = 2 m ( − 1 ) m − i ( m i ) g ( i ) = ∑ i = 2 m ( − 1 ) m − i ( m i ) i ( i − 1 ) n − 1



于是题目就可以在

O(mlogn) O ( m l o g n )
的时间内解决。

洛谷8月月赛T4

给定一张 n×m(mn) n × m ( m ≥ n ) 的棋盘,求在这个棋盘上放置 2n 2 n 个炮使得他们互不攻击的方案数。
(nm2,000(mn10nm100,000)) ( n ≤ m ≤ 2 , 000 或 ( m − n ≤ 10 且 n ≤ m ≤ 100 , 000 ) )
分析题目,会发现每行必然出现两个炮。由于每列出现的数量也不超过2,考虑把原问题转化为:
给定 1mm 1 到 m 共 m 种数字,每种数字有两个。现在将它们组合成 n n 对无序二元组,每个二元组当中两个数字不同的方案数。
原问题不方便直接计算,我们考虑把“每个二元组当中两个数字不同”的限制去掉。但由于原题求的是无序二元组,在不确定每个二元组中数字是否相同的情况下也非常难计算。于是我们把“无序二元组”变为“有序二元组”。

f(n,m)g(n,m)


f


(


n


,


m


)
































g


(


n


,


m


)

为满足上述条件的方案数。考虑如何求 g(n,m) g ( n , m )
注意到最特殊的情况就是有一些种类的数我们把两个全部选进去了,考虑我们选了多少个这样的数字,又有多少种填入的方案。剩下来的种类中必然是每种选择一个,填入剩下的格子中。于是我们有:

g(n,m)=i=0m(mi)A2i2n2iA2n2imi g ( n , m ) = ∑ i = 0 m ( m i ) A 2 n 2 i 2 i A m − i 2 n − 2 i



于是

g(n,m) g ( n , m )
便可以在

O(m) O ( m )
的时间内计算出来。但是题目给

mn10 m − n ≤ 10
的条件干什么呢?观察上述算式,会发现若

2i>2n2n2i>miA2i2nA2n2imi0 2 i > 2 n 或 2 n − 2 i > m − i 时 A 2 n 2 i 或 A m − i 2 n − 2 i 就 为 0 了
,无需计算。

解上述不等式可以发现

2nmin 2 n − m ≤ i ≤ n
,因此我们只需要在

max(2nm,0)in m a x ( 2 n − m , 0 ) ≤ i ≤ n
的范围中求解即可。


g(n,m)=i=max(2nm,0)n(mi)A2i2n2iA2n2imi g ( n , m ) = ∑ i = m a x ( 2 n − m , 0 ) n ( m i ) A 2 n 2 i 2 i A m − i 2 n − 2 i



这个范围大小就是

O(mn) O ( m − n )
级别的了。

我们再考虑如何通过

g(n,m)f(n,m) g ( n , m ) 求 出 f ( n , m )


fg f 和 g
之间一个非常大的区别就是要求二元组中的数字是否相同。我们考虑枚举有多少个二元组中数字相同,别忘了还要把无序变为有序。于是可以得到:


g(n,m)=i=0n(ni)Aim2nif(ni,mi) g ( n , m ) = ∑ i = 0 n ( n i ) A m i 2 n − i f ( n − i , m − i )



于是可以想到二项式反演。但是上面那个算式不方便于反演,我们可以稍微转化一下。


g(n,m)m!=i=0n(ni)2nif(ni,mi)i! g ( n , m ) m ! = ∑ i = 0 n ( n i ) 2 n − i f ( n − i , m − i ) i !



考虑到无论是

f,g f , g
,他们在题目中能够使用到的两个下标差值均为

nm n − m
。于是令:


F(i)=2if(i,in+m)(in+m)!G(i)=g(i,in+m)(in+m)! F ( i ) = 2 i f ( i , i − n + m ) ( i − n + m ) ! , G ( i ) = g ( i , i − n + m ) ( i − n + m ) !



在加上组合数的左右值对称,于是上面的算式就变成二项式反演的模型了。


G(n)=i=0n(ni)F(ni)=i=0n(ni)F(i) G ( n ) = ∑ i = 0 n ( n i ) F ( n − i ) = ∑ i = 0 n ( n i ) F ( i )




F(n)=i=0n(1)ni(ni)G(i) F ( n ) = ∑ i = 0 n ( − 1 ) n − i ( n i ) G ( i )



再根据

F,G F , G
的定义,把

f,g f , g
带入得到:


f(n,m)=m!2ni=0n(1)i(ni)g(ni,mi)(mi)! f ( n , m ) = m ! 2 n ∑ i = 0 n ( − 1 ) i ( n i ) g ( n − i , m − i ) ( m − i ) !



至此,这道题目就可以在

O(min(n,mn)×n) O ( m i n ( n , m − n ) × n )
的时间内解决了。

三、斯特林反演

第一类斯特林数

第一类斯特林数分为有符号和无符号两种,这里仅讨论无符号的情况。
下面记 s(n,k) s ( n , k ) 为无符号第一类斯特林数。
定义:

xn=i=xn+1xi=i=0n(1)nis(n,i)xi x n _ = ∏ i = x − n + 1 x i = ∑ i = 0 n ( − 1 ) n − i s ( n , i ) x i



也就是说,
有符号第一类斯特林数是

x x



n


n


阶下降幂展开式的系数。

定义:


xn¯¯¯=i=xx+n1i=i=0ns(n,i)xi x n ¯ = ∏ i = x x + n − 1 i = ∑ i = 0 n s ( n , i ) x i



也就是说,
无符号第一类斯特林数是

x x



n


n


阶上升幂展开式的系数。根据定义,我们可以使用分治NTT在

O(nlog2n) O ( n l o g 2 n )
的时间内预处理出第一类斯特林数。

组合数学性质:

s(n,k) s ( n , k )
表示将

nk n 个 数 划 分 为 k
个无区别非空环的方案数。

递推式:


s(n,k)=s(n1,k1)+(n1)s(n1,k) s ( n , k ) = s ( n − 1 , k − 1 ) + ( n − 1 ) s ( n − 1 , k )



性质:


i=0ns(n,i)=n! ∑ i = 0 n s ( n , i ) = n !



证明:我们假设一个

1np 1 到 n 排 列 为 p
,定义一次置换为将

ipipi i 位 置 上 的 数 p i 与 p i
位置上的数字交换。则排列可以被划分为若干个环。如2,4,3,1,5,根据置换我们可以把排列分为(2,4,1),(3),(5)三个环。显然的,环的划分与每个排列一一对应,根据第一类斯特林数的组合数学性质,可以证明。

第二类斯特林数

定义: S(n,k) S ( n , k ) 表示将n个数字分为k个无区别非空集合的方案数。
递推式:

S(n,k)=S(n1,k1)+kS(n1,k) S ( n , k ) = S ( n − 1 , k − 1 ) + k S ( n − 1 , k )



根据定义,可以得到如下性质:


kn=i=1k(ki)S(n,i)i! k n = ∑ i = 1 k ( k i ) S ( n , i ) i !



这个公式也比较好理解,我们排除掉非空的条件,并且把无区别变为有区别,枚举共有多少个非空集合即可。

于是根据二项式反演,我们可以得到


S(n,k)=1k!i=1k(1)ki(ki)in=i=0k(1)ki(ki)!ini! S ( n , k ) = 1 k ! ∑ i = 1 k ( − 1 ) k − i ( k i ) i n = ∑ i = 0 k ( − 1 ) k − i ( k − i ) ! · i n i !



因为

i i
从0开始和从1开始没有什么区别。观察到最后的形式其实是一个卷积,因此我们可以通过NTT在


O(nlogn)


O


(


n


l


o


g


n


)


的时间内预处理数第二类斯特林数。

第二类斯特林数的性质还有一个表述,就是

kn=i=1n(ki)S(n,i)i! k n = ∑ i = 1 n ( k i ) S ( n , i ) i !

也就是将

ikn i 的 上 界 由 k 变 为 n
。其实也非常好理解,因为若

i>k(ki)=0n<ki>nS(n,i)=0 i > k , 则 ( k i ) = 0 ; 若 n < k , 则 对 于 i > n 也 有 S ( n , i ) = 0
,不会影响计算结果。

利用第二类斯特林数的性质,我们可以处理出自然数幂和。

先证明一个引理:


i=mn(im)=(n+1nm)b<0b>a(ab)=0 ∑ i = m n ( i m ) = ( n + 1 n − m ) ( 边 界 条 件 定 义 : 若 b < 0 或 b > a 则 ( a b ) = 0 )



显然,当

n=0 n = 0
时无论

m m
取何非负整数都满足要求,或当


m=0n


m


=


0







n


取任何非负整数也满足要求。接下来证明若

n,mn,m+1n+1,m+1 n , m 和 n , m + 1 满 足 , 则 n + 1 , m + 1 也 满 足



i=m+1n+1(im+1)=i=mn(im+1)+(im)=(n+1nm)+(n+1nm1)=(n+2(n+1)(m+1)) ∑ i = m + 1 n + 1 ( i m + 1 ) = ∑ i = m n ( i m + 1 ) + ( i m ) = ( n + 1 n − m ) + ( n + 1 n − m − 1 ) = ( n + 2 ( n + 1 ) − ( m + 1 ) )



引理得证,接下来开始计算自然数幂和。


i=1nik=i=1nj=1min(i,k)(ij)S(k,j)j!=j=1kS(k,j)j!i=jn(ij)=j=1kS(k,j)j!(n+1nj)=j=1kS(k,j)(n+1)j+1j+1 ∑ i = 1 n i k = ∑ i = 1 n ∑ j = 1 m i n ( i , k ) ( i j ) S ( k , j ) j ! = ∑ j = 1 k S ( k , j ) j ! ∑ i = j n ( i j ) = ∑ j = 1 k S ( k , j ) j ! ( n + 1 n − j ) = ∑ j = 1 k S ( k , j ) ( n + 1 ) j + 1 _ j + 1



由于

(n+1)j+1 ( n + 1 ) j + 1 _
是由

j+1 j + 1
个连续整数相乘,必然有一个为

j+1 j + 1
的倍数。因此这种方法可以在

O(k2) O ( k 2 )
的时间内处理出任何模数下的自然数幂和。如果模数类似于998244353,我们可以先用NTT预处理出所有的第二类斯特林数,再预处理出

n+1 n + 1
的下降幂和正整数逆元,可以在

O(klogk) O ( k l o g k )
的时间计算出自然数幂和。

性质应用例题BZOJ2159

给定一棵树,每条边边权为1,对于每个节点 ui=1ndist(u,i)k u , 求 ∑ i = 1 n d i s t ( u , i ) k
考虑应用第二类斯特林数的性质

i=1ndist(u,i)k=i=1nj=1kS(k,j)(dist(u,i)j)j!=j=1kS(k,j)j!i=1n(dist(u,i)j) ∑ i = 1 n d i s t ( u , i ) k = ∑ i = 1 n ∑ j = 1 k S ( k , j ) ( d i s t ( u , i ) j ) j ! = ∑ j = 1 k S ( k , j ) j ! ∑ i = 1 n ( d i s t ( u , i ) j )



则对于每个节点,都计算出

i=1n(dist(u,i)j) ∑ i = 1 n ( d i s t ( u , i ) j )
即可。我们分两次进行树形dp,第一次统计每个节点和它子树当中所有点的和,记为

f(u,j)f(u,j)=vson[u]f(v,j1)+f(v,j) f ( u , j ) , 则 f ( u , j ) = ∑ v ∈ s o n [ u ] f ( v , j − 1 ) + f ( v , j )
,第二次统计每个节点除子树外的所有节点的和,记为

g(u,j)g(u,j)=g(fa[u],j)+g(fa[u],j1)+vson[fa[u]]vuf(v,j2)+2f(v,j1)+f(v,j) g ( u , j ) , 则 g ( u , j ) = g ( f a [ u ] , j ) + g ( f a [ u ] , j − 1 ) + ∑ v ∈ s o n [ f a [ u ] ] 且 v ≠ u f ( v , j − 2 ) + 2 f ( v , j − 1 ) + f ( v , j )
,后面那个求和预处理一下

s(j)=vson[fa[u]]f(v,j) s ( j ) = ∑ v ∈ s o n [ f a [ u ] ] f ( v , j )
,计算的时候减去自己即可。总复杂度

O(nk+k2) O ( n k + k 2 )

反演公式


g(n)=i=mnS(n,i)f(i) g ( n ) = ∑ i = m n S ( n , i ) f ( i )






f(n)=i=mn(1)nis(n,i)g(i) f ( n ) = ∑ i = m n ( − 1 ) n − i s ( n , i ) g ( i )



其中大写

S S
表示第二类斯特林数,小写


s


s


表示第一类斯特林数。

证明:


i=mn(1)nis(n,i)g(i) ∑ i = m n ( − 1 ) n − i s ( n , i ) g ( i )




=i=mn(1)nis(n,i)j=miS(i,j)f(j) = ∑ i = m n ( − 1 ) n − i s ( n , i ) ∑ j = m i S ( i , j ) f ( j )




=j=mnf(j)i=jn(1)nis(n,i)S(i,j) = ∑ j = m n f ( j ) ∑ i = j n ( − 1 ) n − i s ( n , i ) S ( i , j )



考虑两类斯特林数的性质,有


xn=i=1n(1)nis(n,i)xi=i=1n(1)nis(n,i)j=1iS(i,j)xj x n _ = ∑ i = 1 n ( − 1 ) n − i s ( n , i ) x i = ∑ i = 1 n ( − 1 ) n − i s ( n , i ) ∑ j = 1 i S ( i , j ) x j _




=j=1nxji=jn(1)nis(n,i)S(i,j) = ∑ j = 1 n x j _ ∑ i = j n ( − 1 ) n − i s ( n , i ) S ( i , j )



根据上述等式,我们发现只有当

j=n j = n
时后面算式的值才应当为1,其他时刻全为0.因此:


i=mn(1)nis(n,i)g(i)=f(n) ∑ i = m n ( − 1 ) n − i s ( n , i ) g ( i ) = f ( n )



证毕。

我们其实会发现斯特林反演和二项式反演的形式很像,那二项式反演的第二种形式斯特林反演是否满足呢?满足。


g(m)=i=mnS(i,m)f(i)f(m)=i=mn(1)ims(i,m)g(i) g ( m ) = ∑ i = m n S ( i , m ) f ( i ) , 则 f ( m ) = ∑ i = m n ( − 1 ) i − m s ( i , m ) g ( i )



用类似二项式反演的办法可以得到


i=mn(1)ims(i,m)g(i)=j=mnf(j)i=mj(1)imS(j,i)s(i,m) ∑ i = m n ( − 1 ) i − m s ( i , m ) g ( i ) = ∑ j = m n f ( j ) ∑ i = m j ( − 1 ) i − m S ( j , i ) s ( i , m )



再次考虑他们的性质,换一种方法可以得到:


xn=i=1nS(n,i)xi=i=1nS(n,i)j=1i(1)ijs(i,j)xj x n = ∑ i = 1 n S ( n , i ) x i _ = ∑ i = 1 n S ( n , i ) ∑ j = 1 i ( − 1 ) i − j s ( i , j ) x j




=j=1nxji=jn(1)ijS(n,i)s(i,j) = ∑ j = 1 n x j ∑ i = j n ( − 1 ) i − j S ( n , i ) s ( i , j )



仍然会有后面的部分为1当且仅当

j=n j = n
。于是把这个性质带入回去,也就是把上式的

j j
变为


m


m




n n
变为


j


j


,就会发现只有当

j=m j = m
的时候上式的值才为1.因此


j=mnf(j)i=mj(1)imS(j,i)s(i,m)=f(m) ∑ j = m n f ( j ) ∑ i = m j ( − 1 ) i − m S ( j , i ) s ( i , m ) = f ( m )



证毕。

例题BZOJ4617

定义两个结点数相同的图G1与图G2的异或为一个新的图G, 其中如果(u,v)在G1与G2中的出现次数之和为1, 那么边(u,v)在G中, 否则这条边不在G中.现在给定s个结点数相同的图G1…s, 设S=G1,G2,…,Gs, 请问S有多少个子集的异或为一个连通图?

直接做是不好做的,我们考虑差分(容斥)。发现节点数很小,于是可以想到去在节点数上面做手脚。定义 f(i)ig(i)ig(i) f ( i ) 为 异 或 图 中 连 通 块 个 数 恰 好 为 i 的 方 案 数 , g ( i ) 为 异 或 图 中 连 通 块 个 数 大 于 等 于 i 的 方 案 数 。 考 虑 怎 么 求 g ( i )

我们可以考虑枚举最终的连通块有哪些,此时花费的时间为n的贝尔数,最大为115975。此时我们限定枚举出的子集之间不能连边,子集内部随便连不连。枚举每一个子图,看看这个子图含有哪些子集之间的边,每个子图标记一个01串。我们最终要求这些01串异或起来的结果中有多少个为全0串。

可以把这些01串全部插入到线性基中,找出自由元的数量为 x2x x , 则 方 案 数 为 2 x 。为什么呢?对于任何一个自由元的子集,它们异或出来的结果必然也可以用主元代替,这就对应了一个全0串的情况。

于是我们用 O(bell(n)n2s) O ( b e l l ( n ) n 2 s ) 的时间算出了所有的 g g ,接下来算出
f


f

即可。

根据定义,有

g(m)=i=mnS(i,m)f(i) g ( m ) = ∑ i = m n S ( i , m ) f ( i )

因为计算的时候我们相当于把

i i
个连通块划分成了


m


m


个子集。

于是根据斯特林反演,我们可以得到

f(m)=i=mn(1)ims(i,m)g(i) f ( m ) = ∑ i = m n ( − 1 ) i − m s ( i , m ) g ( i )



于是我们最终可以求出

f(1) f ( 1 )
,整个问题便解决了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/200802.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • spring bean之间的关系:继承;依赖「建议收藏」

    spring bean之间的关系:继承;依赖

  • UltraEdit正则表达式替换空行

    UltraEdit正则表达式替换空行前提是,使用unix正则表达式,替换1、使用正规的正则表示式来提换,表达式为:^[\t]*\r\n2、如果第一种方式无法实现,直接在文本中复制空行,然后在替换时使用下面的正则表达式:^复制的内容

  • warning: #1300-D: XXX inherits implicit virtual 报警

    warning: #1300-D: XXX inherits implicit virtual 报警在KeilMDK里使用了C++,其中用到了基类和派生类。编译的时候出现了大量warning: #1300-D:XX_function inheritsimplicitvirtual的警告信息。由于对C++不熟,花了好半天时间去找消除警告信息的方法。后面发现是这样的。在基类中,定义了虚成员函数。如下:classDriver{public:virtual…

  • 安卓设备修改屏幕像素密度以及查看屏幕分辨率

    安卓设备修改屏幕像素密度以及查看屏幕分辨率使用adb修改屏幕像素密度(此命令针对全志开发板子)adbshellamdisplay-density120{以下命令针对高通的开发板子}获取Android设备屏幕分辨率:adbshellwmsize获取android设备屏幕密度:adbshellwmdensity修改屏幕像素密度adbshellwmresize1920*1080adbshell…

  • CentOS 7 yum卸载jdk、安装jdk以及配置jdk环境

    CentOS 7 yum卸载jdk、安装jdk以及配置jdk环境CentOS7yum卸载jdk、安装jdk以及配置jdk环境查看是否已经安装jdk通过命令查询是否已经安装jdk//括号中选择一个即可yumlistinstalled|grep[java][jdk]运行结果类似下图则说明系统已经存在jdk,可卸载卸载jdk(若未存在jdk不用执行)卸载的jdk按已存在的jdk版本进行卸载,示例为jdk1.8.0,不知版本号可观上图…

  • group by详解

    group by详解一. 概述group_by的意思是根据by对数据按照哪个字段进行分组,或者是哪几个字段进行分组。二. 语法select 字段  from 表名 where  条件  group by    字段或者select 字段  from 表名 group by  字段  having  过滤条件注意:对于过滤条…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号