数论整理

来自扶苏的整理授权

代码出门左转

NOIP数论内容整理

一、整除:

对于\(a,b~\in~Z\),若\(\exists~k~\in~Z\),\(s.t.~b~=~k~\times~a\),则说\(a\)整除\(b\),记做\(a~|~b\)

二、带余除法:

\(~\forall~a,b~\in~z\)存在且仅存在唯一的\(q,r~\in~Z\)\(s.t.~b~=~q~\times~a+r\),其中\(r~\in~[0,a)\)。记做\(r~=~b~Mod~a\)

三、公约数

\(a,b~\in~Z\),若\(~\exists~k,x,y~\in~Z^*\)\(s.t.~a~=k~\times~x,b~=~k~\times~y\),则说\(k\)\(a,b\)的公约数。公倍数同理。

四、\(gcd\)\(lcm\)

\(a,b\)的最大公约数为\(gcd(a,b)\),最小公倍数为\(lcm(a,b)\)

五、最大公约数与最小公倍数乘积性质定理

性质:\(a~\times~b=gcd(a,b)~\times~lcm(a,b)\)

六:最大公约数的求取:

(以下不妨设\(b~\leq~a\))

更相减损术:\(gcd(a,b)~=~gcd(b,a-b)\)

欧几里得算法:\(gcd(a,b)~=~gcd(b,a~Mod~b)\)

其中,更相减损术的复杂度是\(O(n)\),欧几里得算法的复杂度是\(O(logn)\)。其中\(n~=~\max(a,b)\)

七:更相减损术的优化

引理:\(\forall~m~\neq~0,~a,b~\in~Z\),有\(m~\times~gcd(a,b)=gcd(ma,mb)\)

\(a,b\)是两个偶数时,显然\(gcd(a,b)\)有一因数\(2\)。于是\(gcd(a,b)~=~2~\times~gcd(\frac{a}{2},\frac{b}{2})\)

\(a,b\)一奇一偶的时候,不妨设\(a\)是偶数。显然\(gcd(a,b)\)不含因子\(2\)。于是有\(gcd(a,b)=gcd(\frac{a}{2},b)\)

\(a,b\)同为奇数时,直接应用更相减损术。\(gcd(a,b)=gcd(b,a-b)\)

考虑两个奇数相减答案显然是偶数。于是一次更相减损术显然对应一个数除以2的操作。即更相减损的次数与除以二的操作次数同阶。考虑一个数最多被除\(log\)次。于是该算法的复杂度为\(O(logn)\)

该算法常用在对两个高精度数求\(gcd\),因为两个高精度数做除法的复杂度难以承受,从而应用该算法。

例题:

给定一个序列,要求支持区间加法。多次查询区间内所有数字的\(gcd\)\(n,m,a_i~\leq~10^5\)

Solution:

因为区间加法无法维护\(gcd\),所以显然不能暴力线段树。考虑对原序列做差分。由更相减损定理,显然成立\(gcd(a,b,c)~=~gcd(a,b-a,c-b)\)。于是差分后区间加法改为单点修改操作。于是一次操作的复杂度为\(O(log^2n)\)。总时间复杂度为\(O\left(m\log^2n\right)\),可以通过本题。

八、扩展欧几里得算法

裴蜀定理:关于\(x,y\)的方程\(ax+by=c\)有解当且仅当\(gcd(a,b)|c\)

求关于\(x,y\)的方程\(ax+by=c\)的一组整数解。

不妨设\(c=gcd(a,b)\)。否则左侧乘一常数\(k\),不失一般性

根据欧几里得算法,有

\[gcd(a,b)=gcd(b,a~Mod~b) \]

于是有$$ax+by=gcd(a,b)=gcd(b,aModb)=bx_0+(aModb)y_0$$

于是有

\[\begin{align} ax+by & = bx_0+(a-\left\lfloor\frac{a}{b}\right\rfloor~\times~b)y_0\\ & = ay_0+b(x_0-\left\lfloor\frac{a}{b}\right\rfloor~y_0) \\ \end{align} \]

根据对应系数相等,显然有\(x=y_0,y=x_0-\left\lfloor\frac{a}{b}\right\rfloor~y_0\)。考虑他的一组特解:当\(b=0\)时,显然\(x=1,y=0\)成立。

求上述方程的所有解

假设求出的该方程的一组特解\(x=x_0,y=y_0\),则该方程的所有解为\(x=x_0+\frac{k~\times~b}{gcd(a,b)},y=y_0-\frac{k~\times~a}{gcd(a,b)}\)

九、埃拉托色尼筛法:

对每个数只筛掉它的倍数。

int pcnt;
int prime[maxn];
bool is_not_prime[maxn];

void Get_Prime(int x) {
	is_not_prime[1]=true;
	for(int i=1;i<=x;++i) if(!is_not_prime[i]) {
		prime[++pcnt]=i;
		for(int j=i*i;j<=x;j+=i;) is_not_prime[j]=true;
	}
}

十:欧拉筛法

对每个数只被他的最小素因子筛掉

int pcnt;
int prime[maxn];
bool is_not_prime[maxn];

void Get_Prime(int x) {
	is_not_prime[1]=true;
	for(int i=2;i<=x;++i) {
		if(!is_not_prime[i]) prime[++pcnt]=i;
		for(int j=1;j<=pcnt;++j) {
			if(i*prime[j]>x) break;
			is_not_prime[i*prime[j]]=true;
			if(!(i%prime[j])) break;
		}
	}
}

十一:在\(O(nlogn)\)时间内筛除\(n\)以内所有数的素因子

对于每个数记录自己的最小素因子。对于第每个数,迭代将每个数除以自己的最小素因子。

int pcnt;
int prime[maxn],pre[maxn];
bool is_not_prime[maxn];

void Get_Prime(int x) {
	is_not_prime[1]=true;
	for(int i=2;i<=x;++i) {
		if(!is_not_prime[i]) prime[++pcnt],pre[i]=pcnt;
		for(rg int j=1;j<=pcnt;++j) {
			if(i*prime[j] > x) break;
			is_not_prime[i*prime[j]]=true;
			pre[i*prime[j]]=j;
			if(!(i%prime[j])) break;
		}
	}
}

void ans(int x) {
	for(int i=1;i<=x;++i) {
		printf("%d:",i);
		int di=i;
		while(di != 1) printf("%d",prime[pre[di]]),di/=prime[pre[di]];
		putchar('\n');
	}
}

十二、唯一分解定理:

\(\forall~x~\in~Z\),存在且仅存在一个形如\(x=p_1^{c_1}~p_2^{c_2}~...~p_k^{c_k}\)的等式。其中满足\(p_i ~<~p_{i+1},p_i\)为质数,\(c_i~\in~Z\)

则对于\(a,b\)\(gcd,lcm\),其唯一分解式对应位置的指数取\(\min,\max\)即为对应的\(gcd,lcm\)的唯一分解式

十三、欧拉phi函数:

定义:\(\phi(x)\)\([1,n)\)中与\(n\)互质的数的个数

\(\phi(x)~=~n~(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k})\)

其中\(p_i\)\(n\)的唯一分解式对应底数。

证明:不妨设\(n\)只有\(p,q\)两个因数。否则做数学归纳

则与\(n\)互质的数的个数为\(n\)减去\(p\)的倍数和\(q\)的倍数。根据容斥原理,应加回\((pq)\)的倍数。即

\[\begin{align} \phi(x) & = ~n-\frac{n}{p}-\frac{n}{q}+\frac{n}{pq}\\ & = ~n\left(1-\frac{1}{p}-\frac{1}{q}-\frac{1}{pq}\right)\\ & = ~n\left(1-\frac{1}{p}\right) \left(1-\frac{1}{q}\right) \end{align} \]

对于\(n\)有更多因数的情况,可以依据唯一分解定理做数学归纳。证毕。

求单个数字的\(\phi\)函数:

暴力枚举质因数。复杂度\(O(\sqrt{n})\)

埃拉托色尼筛法:

对每个质数,修改他的倍数的\(phi\)函数值

int pcnt;
int prime[maxn],phi[maxn];
bool is_not_prime[maxn];

void euler(int x) {
    for(int i=1;i<=x;++i) phi[i]=i;
    for(int i=2;i<=x;++i) if(!is_not_prime[i]) {
        prime[++pcnt]=i;phi[i]=i-1;
        for(rg int j=i*i;j<=x;j+=i) {
            is_not_prime[j]=true;
            phi[j]=phi[j]/i*(i-1);
        }
    }
}
欧拉筛:

对每个数,只被他的最小质因子筛掉。

考虑通过一个质因子求出他的欧拉函数值。

引理:\(\forall x\)为质数,显然\(\phi(x)=x-1\)

定理一:\(\forall~x~\in~Z,p|x\),若\(\frac{x}{p}\)\(p\)不互质,则\(\phi(x)=\phi(\frac{x}{p})~\times~p\)

证明:

不妨设 \(x\) 有且仅有 \(p,q\) 两个质因子,否则对\(q\)做数学归纳,不失一般性

\(q~=~\frac{x}{p}\)

于是由容斥原理有

\[\phi(x)~=~x~-~\frac{x}{p}~-~\frac{x}{q}~+~\frac{x}{pq} \]

\[\phi(\frac{x}{p})~=~\frac{x}{p}~-\frac{x}{p^2}~-~\frac{x}{pq}+~\frac{x}{p^2q} \]

上式除以下式,得

\[\frac{\phi(x)}{\phi\frac{x}{p}}=p \]

移项整理后,原式得证。

证毕。

定理二:\(\forall~x~\in~Z,p|x\),若\(\frac{x}{p}\)\(p\)互质,则\(\phi(x)=\phi(\frac{x}{p})~\times~(p-1)\)

证明:

易证\(phi\)函数为积性函数。因为\(\frac{x}{p}\)\(p\)互质,于是\(\phi(x)=\phi(\frac{x}{p})~\times~\phi(p)\)

又因为\(p\)是一个质数,于是根据引理,\(\phi(p)=p-1\)。(upd)

原式得证。

证毕。

于是对于每个数,若他是质数,则应用引理,否则在筛时,若最小质因子与他互质,则应用定理二,否则应用定理一。

int pcnt;
int prime[maxn],phi[maxn];
bool is_not_prime[maxn];

void euler(int x){
    phi[1]=1;
    is_not_prime[1]=true;
    for(int i=1;i<=x;++i){
        if(!is_not_prime[i]) prime[++pcnt]=i,phi[i]=i-1;
        for(int j=1;j<=pcnt;++j){
            if(i*prime[j]>x) break;
            is_not_prime[i*prime[j]]=true;
            if(!(i%prime[j])) {phi[i*prime[j]]=phi[i]*prime[j];break;}
            else phi[i*prime[j]]=phi[i]*(prime[j]-1);
        }
    }
}

十四、模方程:

定义:\(\forall a,b ~\in~Z\),若\(a~Mod~m~=~b~Mod~m\) 则称作\(a,b\)在模\(m\)域下同余。记做\(a~\equiv~b~(Mod~m)\)

同余式两边支持同时加、减、乘同一个数字,但不支持除法。

十五、模逆元:

\(\forall~a~\in~Z\),若\(\exists~x~\in~Z,s.t.~ax~\equiv~1~(Mod~m)\)则称\(x\)\(a\)在模\(m\)域下的逆元。在模\(m\)域下,任何一个整数除以\(a\)完全等价于乘\(x\)

一般而言,\(m\)为质数是\(a\)存在逆元的充分条件

十六、逆元的求法

单个数求逆元

解方程\(ax~\equiv~1~(Mod~m)\),发现等价于\(ax+km=1\)。直接使用\(exgcd\)求得答案即可。

线性筛逆元:

\(x\)的逆元为\(x^{-1}\),数组表示为\(inv_x\)

则有线性递推式:\(inv_i~=~(-\left\lfloor\frac{m}{i}\right\rfloor~\times~inv_{m~Mod~i}+m)~Mod~m\)

证明:

对于所有的\(i\),写出他的带余除法表达式:

\[m~=~ki~+~r,r~\in~[0,i) ~~~① \]

\(Mod~m\)域下有:

\[ki~+~r~\equiv~0~(Mod~m) \]

等式两侧同乘\(i^{-1}~\times~r^{-1}\)

化简,整理得到:

\[i^{-1}~\equiv~-kr^{-1} (Mod m)~~~② \]

因为由\(①\)式得\(k~=~\left\lfloor\frac{m}{i}\right\rfloor\)\(r=m~Mod~i\),带入\(②\)式原式得证。

int inv[maxn];

void Get_inv(int x,int p) {
	inv[1]=1;
	for(int i=2;i<=x;++i) inv[i]=(p-p/i)*inv[p%i]%p;
}

十七、模

模: 表示一个集合\(S\subseteq Z\),集合对加减法封闭

生成模: 集合\(T\)的生成模是,最小的模\(S\),使得\(T\subseteq S\)

实际意义:若\(a\in T,b\in T,a+b\notin T~~OR~~a-b\notin T\),将\(a+b,a-b\)加入\(T\)。不断进行。

\(S\)一定是某个数所有倍数的集合
证明:若\(x\)\(S\)中的最小正整数
\(~~~~~~~~~~\)假设存在\(y\),不是\(x\)的倍数
\(~~~~~~~~~~\)\(r=y\mod x\),则\(r\in S\)
\(~~~~~~~~~~\)那么\(0<r<x\),矛盾。
\(~~~~~~~~~~\)因此,模\(S\)一定是某个数所有倍数的集合。


十八、群、环、域相关

\((G,\cdot)\)

封闭性:\(\forall a\in G, b\in G, a\cdot b \in G\)

结合律:\((a\cdot b)\cdot c=a\cdot (b\cdot c)\)

单位元(幺元):\(\exists e\in G\), s.t. \(\forall a\in G, e\cdot a=a\cdot e=a\)

逆元:\(\forall a\in G, \exists b\in G\), s.t. \(a\cdot b=b\cdot a=e\)

举例:

\(Q\setminus\{0\}, R\setminus\{0\}, C\setminus\{0\}\),所有行列式非0的\(n\)阶方阵组成一个群,{1,-1}

单位元唯一

设有两个单位元\(e_1,e_2\)

\(e_1=e_1e_2=e_2\)

逆元唯一

假设\(a\)有两个逆元\(b,c\),那么

\(b=b(ac)=(ba)c=c\)

周期:\(a\)的周期是\(o(a)\)

\(o(a)\)表示最小正整数,使得\(a^{o(a)}=e\)

\((ab)^{-1}=b^{-1}a^{-1}\)

\(ab(b^{-1}a^{-1})=b^{-1}a^{-1}ab=e\)

子群

\((G,\cdot)\),\(H\subseteq G\), 且 \((H,\cdot)\)是群,称在运算\(\cdot\)下,\(H\)\(G\)的子群,用\(H\leq G\)表示

生成子群: 集合\(S\)的生成子群用\(<S>\)表示

右傍集

如果\(H\leq G\),对于\(a\in G\),定义集合\(Ha=\{x\in G~|~ \exists h\in H, ha=x\}\)

\(|H|=|Ha|\)

如果\(h_1\neq h_2\),那么\(h_1a\neq h_2a\)

反证:若\(h_1a=h_2a\)\(h_1aa^{-1}=h_2aa^{-1},~h_1=h_2\)矛盾

对于不同的\(h\)\(ha\)互不相同,因此\(|Ha|=|H|\)

\(Ha=Hb\)当且仅当\(ab^{-1}\in H\)

\(Ha=Hb\),则\(ea\in Ha\),即\(a\in Hb\),那么\(\exists h\in H,~a=hb\),那么\(ab^{-1}=h\)

\(ab^{-1}\in H\),那么\(ha=ha(b^{-1}b)=h'b\in Hb\),因此\(Ha\subseteq Hb\)

\(hb=hb(a^{-1}a)=h(ab^{-1})^{-1}a\in Ha\),故\(Hb\subseteq Ha\)

因此\(Ha=Hb\)

\(Ha\neq Hb\),那么\(Ha\cap Hb = \emptyset\)

假设\(x\in Ha\cap Hb\), 则\(\exists h_1,h_2\in H\)\(h_1a=h_2b=x\) , 那么\(ab^{-1}=h_1^{-1}h_2\in H\),那么\(Ha=Hb\),矛盾

由于\(\forall g\in G\)\(g\in Hg\),所以\(G\)中每个元素都在某个傍集中。用\([G:H]\)表示不同的傍集数,那么

\(|G|=|H|\cdot [G:H]\)

\(|H|\)\(|G|\)的约数

\(a\in G\),则\(o(a)~~|~~|G|\)

考虑\(a\)的生成子群\(<a>=\{a,a^2,a^3,...a^{o(a)}\}\)

考虑质数\(p\),考虑群\(G=\{1,2,\dots,p-1\}\),群的运算定义为对\(p\)取模的乘法

\(\forall a\in G, a^{p-1}=1(\mod p)\)

考虑\(n\in N^{+}\),考虑群\(G=\{1\leq x\leq n~|~gcd(x,n)=1\}\),群的运算定义为对\(n\)取模的乘法

\(|G|=\phi(n)\)

\(\forall a\in G, a^{\phi(n)}=1 (\mod n)\)


例题

\(a,b\in G\)\(o(a)=m\)\(o(b)=n\)\(ab=ba\)

1.证明:若\((m,n)=1\),则存在\(g\in G\),s.t. \(o(g)=mn\)

2.证明:存在\(g\in G\),s.t. \(o(g)=lcm(m,n)\)

证明:

  1. \(g=ab\),假设\(o(ab)=k\), 由于\((ab)^{mn}=e\),则\(k\leq mn\)

\((ab)^{k}=e\),那么\(a^{nk}=(ab)^{nk}=e\), \(m|nk\)

同理,\(n|mk\)

\(m|k, n|k\)\(mn|k\)

综上\(k=mn\)

  1. \(m=t_1^{p_1}t_2^{p_2}\dots t_s^{p_s}\)

\(n=t_1^{q_1}t_2^{q_2}\dots t_s^{q_s}\)

通过交换各个\(a_i\)的顺序,总能存在\(0\leq l \leq s\),s.t.

\(\forall i\leq l\), \(p_i\leq q_i\)

\(\forall i > l\), \(p_i\geq q_i\)

\(c=a^{u},~u=t_1^{p_1}t_2^{p_2}\dots t_l^{p_l}\)

\(d=b^{v},~v=t_{l+1}^{q_{l+1}}t_{l+2}^{q_{l+2}}\dots t_s^{q_s}\)

\(o(cd)=lcm(m,n)\)

由于\(o(c)=m/u=t_{l+1}^{p_{l+1}}t_{l+2}^{p_{l+2}}\dots t_s^{p_s}\)

\(o(d)=n/v=t_1^{q_1}t_2^{q_2}\dots t_l^{q_l}\)

那么\(gcd(o(c),o(d))=1\),又\(cd=dc\),由第一小问,\(o(cd)=o(c)o(d)=lcm(c,d)\)

循环群

如果\(G=<a>\),称\(G\)是循环群

举例:对7取余的乘法下,{1,2,3,4,5,6}是循环群

\(k\)取余的加法下,\(\{0,1,\dots,k-1\}\)是循环群

\(G=<a>\)是有限循环群,则\(o(a)=|G|\)

\(k=o(a)\),则\(a^k=e\),那么\(a^{k+i}=a^i\)

考虑\(\{a^1,a^2,\dots,a^{k}\}\),这当中的数两两不同

反证:设\(1\leq x\leq y\leq k\)\(a^x=a^y\),那么\(a^{y-x}=e\),矛盾

\(m\)是最小的正整数,使得\(\forall g\in G, g^{m}=e\)

交换群\(G\)是循环群,当且仅当\(m=|G|\)

\(G=<a>\)是循环群,则\(o(a)=|G|\),所以\(m\geq |G|\)

又由于\(\forall g\in G\), \(g^{|G|}=e\),所以\(m=|G|\)

\(m=|G|\)

如果\(\exists a\in G\),s.t. \(o(a)=|G|\),那么\(G=<a>\)

否则,\(\forall g\in G\), \(o(g)<|G|\)

设周期最大的元素是\(a\)\(o(a)=t\)

那么\(\forall g\in G\), 由刚才的例题,可知\(o(g)|t\)

那么\(t\)满足\(\forall g\in G, g^{t}=e\)

由于\(m\)是最小的正整数,使得\(\forall g\in G, g^{m}=e\),故\(m\leq t\),矛盾,因此这种情况不会出现

原根

半群:满足封闭性和结合律

交换群:满足交换律的群

环:\((R,+,\cdot)\)其中\((R,+)\)是交换群,\((R,\cdot)\)是半群

举例子:\(Z\), \(R[x]\)

域:\((F,+,\cdot)\)其中\((F,+)\)是交换群,\((F\setminus\{0\},\cdot)\)是交换群

\(Q,R,C\)

代数基本定理:在域\(F\)中,\(n\)次非零多项式\(f(x)\)至多有\(n\)个根

任意一个域的乘法群的有限子群\(G\)一定是循环群

\(m\)是最小的正整数,使得\(\forall g\in G, g^{m}=e\)

首先\(\forall g\in G, g^{|G|}=e\)\(m\leq |G|\)

考虑多项式\(x^m-e\)\(G\)中元素都是这个多项式的根,由代数基本定理,\(|G|\leq m\)

因此\(m=|G|\)

由循环群性质,\(G\)是循环群。

考虑质数\(p\),在对\(p\)取模的意义下进行加法和乘法,那么\(\{0,1,2,\dots,p-1\}\)是一个域

乘法群\(\{1,2,\dots,p-1\}\)是循环群

定义:这个循环群的生成元叫做原根

对于原根\(a\)\(\forall 1\leq i\leq p-1\)\(\exists x>0\), \(a^x=i\)

一个循环群\(G\),设\(p-1=|G|\),假设其中\(p\)是质数

\(a\)是生成元

\(G=\{a,a^2,a^3,\dots,a^{p-1}\}\)

那么其中\(a^{p-1}=e\)

如果\(g\)是原根,当且仅当\(o(g)=p-1\)

\(g=a^t\),那么\(o(g)\)是最小的\(s\)使得\(p-1~|~st\)

\(o(g)=p-1\)当且仅当\(t\)\(p-1\)互质

因为\(st\)\(p-1\)的倍数,也是\(t\)的倍数,所以是\(t\)\(p-1\)的公倍数。

\(t\)\(p-1\)互质,\(t\)\(p-1\)的公倍数最小是\(t(p-1)\)。由于\(st\)\(t\)\(p-1\)的公倍数,因此\(s\geq p-1\)。那么\(s=p-1\)

\(t\)\(p-1\)不互质,设它们的最大公约数是\(d\),则\(d>1\)。取\(s=(p-1)/d\),则\(st=(p-1)t/d=(p-1)(t/d)\)

欧拉函数:\(\phi(n)\)定义为\(1\)\(n\)中与\(n\)互质的数的数量

那么\(|G|\)中原根的数量就是\(\phi(p-1)\)

由于\(\phi(p-1)\)较大,因此寻找原根时,暴力即可,枚举\(2,3,\dots\),每当枚举到一个数,判断是不是原根。

判断\(a\)是否是原根是,只需判断是否存在比\(p-1\)小的数\(x\),使得\(a^x=1\)

枚举\(p-1\)的所有质因子\(d\),判断\(a^{\frac{p-1}{d}}\)是否是1

如果都不是,那么\(a\)就是原根

假设\(o(a)=k\),假设\(k<p-1\),那么\(k|p-1\)

由于\(a^{gcd(k,p-1)}=1\),所以\(k | p-1\)

\(t=\frac{p-1}{k}\),那么\(t>1\)

\(d\)\(t\)中任意一个质因子,\(\frac{p-1}{t}|\frac{p-1}{d}\),那么\(a^{\frac{p-1}{d}}=1\)

因此只需枚举\(p-1\)的所有质因子\(d\),判断\(a^{\frac{p-1}{d}}\)是否是1

十九、离散对数

\(G\)的原根是\(a\),由于\(\forall g\in G\)\(\exists x, a^x=g\),那么\(x=\log_{a}{g}\)

令$q=\lceil \sqrt{p}\rceil $

求出\(S=\{a^0, a^1, \dots, a^q\}\)

求出\(T=\{a^0,a^q,a^{2q},\dots, a^{q^2}\}\)

任意一个\(a^x=g\),因为\(x=kq+l, 0\leq k,l\leq q\)

那么\(g=a^{kq} a^{l}\)

可以写成\(g=st,s\in S,t\in T\)

枚举\(s\in S\),那么需要的\(t\)就是\(s^{-1}g\)。对\(T\)建哈希表(或对\(T\)排序二分),查找\(s^{-1}g\)\(T\)中是否存在。

这样可以\(O(q)\)的时间复杂度求出\(g=st\)的形式,进而求出\(x=\log_{a}{g}\)

欢迎指正评论O(∩_∩)O~~

posted @ 2018-10-16 17:20  Kylin_Seven  阅读(371)  评论(3编辑  收藏  举报