第三章第九题
**题目:**定义 Fibonacci 数列如下:
F
(
0
)
=
0
,
F
(
1
)
=
1
F(0) = 0,F(1) = 1
F(0)=0,F(1)=1,且对于
n
≥
2
,
F
(
n
)
=
F
(
n
−
1
)
+
F
(
n
−
2
)
n ≥ 2,F(n) = F(n − 1) + F(n−2)
n≥2,F(n)=F(n−1)+F(n−2)。所以,该数列是:0, 1, 1, 2, 3, 5, 8, 13, 21, . . . 。如何能快速地求出
F
(
n
)
F(n)
F(n)呢?
[
1
1
1
0
]
n
=
[
F
(
n
+
1
)
F
(
n
)
F
(
n
)
F
(
n
−
1
)
]
\begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^n=\begin{bmatrix} F(n+1) & F(n) \\ F(n) & F(n-1) \end{bmatrix}
[1110]n=[F(n+1)F(n)F(n)F(n−1)]
虽然,看上去该算法需要一次矩阵的指数运算,但是借助快速指数运算的方法,这 里可以产生一个快速求解
F
(
n
)
F(n)
F(n) 的算法。请给出算法,并编程实现,C 语言或者 Python 都可以。
**答案:**C++代码如下
先声明一个二阶矩阵的结构体,并进行二阶矩阵乘法的运算符重载
//二阶矩阵结构体
struct Matrix
{
long long Data[2][2];
};
//二阶矩阵乘法运算符重载
Matrix operator*(Matrix A, Matrix B)
{
Matrix C;
C.Data[0][0] = A.Data[0][0] * B.Data[0][0] + A.Data[0][1] * B.Data[1][0];
C.Data[1][0] = A.Data[1][0] * B.Data[0][0] + A.Data[1][1] * B.Data[1][0];
C.Data[0][1] = A.Data[0][0] * B.Data[0][1] + A.Data[0][1] * B.Data[1][1];
C.Data[1][1] = A.Data[1][0] * B.Data[0][1] + A.Data[1][1] * B.Data[1][1];
return C;
}
矩阵快速指数运算的递归版本:
Matrix F(int n)//递归
{
Matrix A;
A.Data[0][0] = 1;
A.Data[0][1] = 1;
A.Data[1][0] = 1;
A.Data[1][1] = 0;
if (n == 1)
return A;
Matrix temp = F(n / 2);
if (n % 2 == 0)
return temp * temp;
else if (n % 2 == 1)
return A * temp * temp;
}
矩阵快速运算的迭代版本
Matrix F2(int n)//迭代
{
Matrix A;
A.Data[0][0] = 1;
A.Data[0][1] = 1;
A.Data[1][0] = 1;
A.Data[1][1] = 0;
Matrix res;//置为单位矩阵
res.Data[0][0] = 1;
res.Data[0][1] = 0;
res.Data[1][0] = 0;
res.Data[1][1] = 1;
while (n != 0)
{
if (n & 1)
res = res * A;
n >>= 1;
A = A * A;
}
return res;
}
第四章第十四题
**题目:**给定任意正整数
n
,
n
n,n
n,n 的所有因子分别记为
d
0
,
d
1
,
⋯
,
d
r
,
d_0, d_1, \cdots , d_r,
d0,d1,⋯,dr,其中包括
1
1
1和
n
n
n。记函数:
F
(
n
)
=
ϕ
(
d
0
)
+
ϕ
(
d
1
)
+
⋅
⋅
⋅
+
ϕ
(
d
r
)
F(n)={\phi(d_0)+\phi(d_1)+· · ·+\phi(d_r)}
F(n)=ϕ(d0)+ϕ(d1)+⋅⋅⋅+ϕ(dr)
现在需要证明
F
(
n
)
=
n
F(n) = n
F(n)=n。为完成这个任务,请依次完成以下小任务:
(
a
)
(a)
(a). 证明,对任意素数
p
,
F
(
p
)
=
p
p,F(p) = p
p,F(p)=p。
(
b
)
(b)
(b). 证明,对任意素数
p
,
F
(
p
2
)
=
p
2
p,F(p^2) = p^2
p,F(p2)=p2。
(
c
)
(c)
(c). 证明,对任意素数
p
,
F
(
p
k
)
=
p
k
p,F(p^k) = p^k
p,F(pk)=pk,
k
k
k 是任意正整数。
(
d
)
(d)
(d). 证明,对任意素数
p
和
q
p 和 q
p和q,
F
(
p
q
)
=
p
q
F(pq) = pq
F(pq)=pq。
(
e
)
(e)
(e). 证明函数 F 是积性函数,即对任意的正整数
m
和
n
m 和 n
m和n,如果
g
c
d
(
m
,
n
)
=
1
gcd(m, n) = 1
gcd(m,n)=1,则
F
(
m
n
)
=
F
(
m
)
F
(
n
)
F(mn) = F(m)F(n)
F(mn)=F(m)F(n)。[提示:既然 m 与 n 互素,则它们之间就不存在大于一 的公因子,那么它们的因子相乘之后作用于欧拉函数会满足什么特性?]
(
f
)
(f)
(f). 最后,完成证明
F
(
n
)
=
n
F(n) = n
F(n)=n的任务。[提示:任意整数 n 都是素数的乘积,即
n
=
p
0
k
0
p
1
k
1
⋅
⋅
⋅
p
t
k
t
n =p_0^{k_0} p_1^{k_1} · · · p_t^{k_t}
n=p0k0p1k1⋅⋅⋅ptkt 。]
解:
(
a
)
.
(a).
(a).对于任意素数
p
p
p,有两个因子
1
和
p
1和p
1和p,所以有
F
(
p
)
=
ϕ
(
1
)
+
ϕ
(
p
)
F(p)=\phi(1)+\phi(p)
F(p)=ϕ(1)+ϕ(p),根据欧拉
P
h
i
Phi
Phi函数性质有
ϕ
(
p
)
=
p
−
1
\phi(p)=p-1
ϕ(p)=p−1,所以
F
(
p
)
=
ϕ
(
1
)
+
ϕ
(
p
)
=
1
+
p
−
1
=
p
F(p)=\phi(1)+\phi(p)=1+p-1=p
F(p)=ϕ(1)+ϕ(p)=1+p−1=p,题目得证。
(
b
)
.
(b).
(b).对于任意素数
p
p
p,
p
2
p^2
p2有三个因子
1
,
p
,
p
2
1,p,p^2
1,p,p2
∴
F
(
p
2
)
=
ϕ
(
1
)
+
ϕ
(
p
)
+
ϕ
(
p
2
)
\therefore F(p^2)=\phi(1)+\phi(p)+\phi(p^2)
∴F(p2)=ϕ(1)+ϕ(p)+ϕ(p2)
根据欧拉
P
h
i
Phi
Phi函数性质有
ϕ
(
p
k
)
=
p
k
−
p
k
−
1
\phi(p^k)=p^k-p^{k-1}
ϕ(pk)=pk−pk−1
∴
F
(
p
2
)
=
ϕ
(
1
)
+
ϕ
(
p
)
+
ϕ
(
p
2
)
=
1
+
p
−
1
+
p
2
−
p
=
p
2
\therefore F(p^2)=\phi(1)+\phi(p)+\phi(p^2)=1+p-1+p^2-p=p^2
∴F(p2)=ϕ(1)+ϕ(p)+ϕ(p2)=1+p−1+p2−p=p2即题目得证。
(
c
)
.
(c).
(c).对于任意素数
p
,
p
k
p,p^k
p,pk有因子
1
,
p
,
p
2
⋯
p
k
1,p,p^{2}\cdots p^k
1,p,p2⋯pk,
∴
F
(
p
k
)
=
ϕ
(
1
)
+
ϕ
(
p
)
+
⋯
+
ϕ
(
p
k
)
\therefore F(p^k)=\phi(1)+\phi(p)+\cdots+\phi(p^k)
∴F(pk)=ϕ(1)+ϕ(p)+⋯+ϕ(pk)
=
1
+
p
−
1
+
p
2
−
p
+
⋯
+
p
k
−
1
−
P
k
−
2
+
p
k
−
p
k
−
1
=1+p-1+p^2-p+\cdots+p^{k-1}-P^{k-2}+p^k-p^k-1
=1+p−1+p2−p+⋯+pk−1−Pk−2+pk−pk−1
=
P
k
=P^k
=Pk,
∴
\therefore
∴ 题目得证。
(
d
)
.
(d).
(d).对于任意素数
p
和
q
p和q
p和q,
p
q
pq
pq有因子
1
,
p
,
q
,
p
q
1,p,q,pq
1,p,q,pq
∴
F
(
p
q
)
=
ϕ
(
1
)
+
ϕ
(
p
)
+
ϕ
(
q
)
+
ϕ
(
p
q
)
\therefore F(pq)=\phi(1)+\phi(p)+\phi(q)+\phi(pq)
∴F(pq)=ϕ(1)+ϕ(p)+ϕ(q)+ϕ(pq)
=
1
+
p
−
1
+
q
−
1
+
(
p
−
1
)
(
q
−
1
)
=1+p-1+q-1+(p-1)(q-1)
=1+p−1+q−1+(p−1)(q−1)
=
p
q
∴
=pq\therefore
=pq∴题目得证
(
e
)
.
(e).
(e).对任意的正整数
m
和
n
m 和 n
m和n,如果
g
c
d
(
m
,
n
)
=
1
gcd(m, n) = 1
gcd(m,n)=1,即
m
与
n
m与n
m与n互素,则
m
m
m的因子与
n
n
n的因子也都是互素的,设
m
m
m的因子为
d
m
1
,
d
m
2
⋯
d
m
x
,
d_{m1},d_{m{2}}\cdots d_{mx},
dm1,dm2⋯dmx,包括
1
和
m
1和m
1和m,共有
x
x
x个,
n
n
n的因子设为
d
n
1
,
d
n
2
⋯
d
n
y
d_{n1},d_{n{2}}\cdots d_{ny}
dn1,dn2⋯dny,包括
1
和
n
1和n
1和n,共有
y
y
y个,
则
m
n
mn
mn的因子有
d
m
1
d
n
1
,
d
m
1
d
n
2
⋯
d
m
1
d
n
y
d_{m1}d_{n1},d_{m1}d_{n{2}}\cdots d_{m1}d_{ny}
dm1dn1,dm1dn2⋯dm1dny,
,
d
m
2
d
n
1
,
d
m
2
d
n
2
⋯
d
m
2
d
n
y
⋯
,d_{m{2}}d_{n1},d_{m{2}}d_{n{2}}\cdots d_{m{2}}d_{ny}\cdots
,dm2dn1,dm2dn2⋯dm2dny⋯
⋯
,
d
m
x
d
n
1
,
d
m
x
d
n
2
⋯
d
m
x
d
n
y
\cdots ,d_{mx}d_{n1},d_{mx}d_{n{2}}\cdots d_{mx}d_{ny}
⋯,dmxdn1,dmxdn2⋯dmxdny共
x
y
xy
xy个因子。
∴
F
(
m
n
)
=
ϕ
(
d
m
1
d
n
1
)
+
ϕ
(
d
m
1
d
n
2
)
+
⋯
ϕ
(
d
m
1
d
n
y
)
\therefore F(mn)=\phi(d_{m1}d_{n1})+\phi(d_{m1}d_{n{2}})+\cdots\phi(d_{m1}d_{ny})
∴F(mn)=ϕ(dm1dn1)+ϕ(dm1dn2)+⋯ϕ(dm1dny)
+
ϕ
(
d
m
2
d
n
1
)
+
ϕ
(
d
m
2
d
n
2
)
⋯
+
ϕ
(
d
m
2
d
n
y
)
+
⋯
+\phi(d_{m2}d_{n1})+\phi(d_{m2}d_{n{2}})\cdots +\phi(d_{m2}d_{ny})+\cdots
+ϕ(dm2dn1)+ϕ(dm2dn2)⋯+ϕ(dm2dny)+⋯
⋯
ϕ
(
d
m
x
d
n
1
)
+
ϕ
(
d
m
x
d
n
2
)
⋯
ϕ
(
d
m
x
d
n
y
)
\cdots\phi(d_{mx}d_{n1})+\phi(d_{mx}d_{n{2}})\cdots\phi(d_{mx}d_{ny})
⋯ϕ(dmxdn1)+ϕ(dmxdn2)⋯ϕ(dmxdny)
=
ϕ
(
d
m
1
)
ϕ
(
d
n
1
)
+
ϕ
(
d
m
1
)
ϕ
(
d
n
2
)
+
⋯
ϕ
(
d
m
1
)
ϕ
(
d
n
y
)
=\phi(d_{m1})\phi(d_{n1})+\phi(d_{m1})\phi(d_{n{2}})+\cdots\phi(d_{m1})\phi(d_{ny})
=ϕ(dm1)ϕ(dn1)+ϕ(dm1)ϕ(dn2)+⋯ϕ(dm1)ϕ(dny)
+
ϕ
(
d
m
2
)
ϕ
(
d
n
1
)
+
ϕ
(
d
m
2
)
ϕ
(
d
n
2
)
⋯
+
ϕ
(
d
m
2
)
ϕ
(
d
n
y
)
+
⋯
+\phi(d_{m2})\phi(d_{n1})+\phi(d_{m2})\phi(d_{n{2}})\cdots+\phi(d_{m2})\phi(d_{ny})+\cdots
+ϕ(dm2)ϕ(dn1)+ϕ(dm2)ϕ(dn2)⋯+ϕ(dm2)ϕ(dny)+⋯
⋯
ϕ
(
d
m
x
)
ϕ
(
d
n
1
)
+
ϕ
(
d
m
x
)
ϕ
(
d
n
2
)
⋯
ϕ
(
d
m
x
)
ϕ
(
d
n
y
)
\cdots\phi(d_{mx})\phi(d_{n1})+\phi(d_{mx})\phi(d_{n{2}})\cdots\phi(d_{mx})\phi(d_{ny})
⋯ϕ(dmx)ϕ(dn1)+ϕ(dmx)ϕ(dn2)⋯ϕ(dmx)ϕ(dny)
=
ϕ
(
d
m
1
)
[
ϕ
(
d
n
0
)
+
ϕ
(
d
n
1
)
+
ϕ
(
d
n
2
)
+
⋯
+
ϕ
(
d
n
y
]
=\phi(d_{m1})[\phi(d_{n0})+\phi(d_{n1})+\phi(d_{n{2}})+\cdots+\phi( d_{ny}]
=ϕ(dm1)[ϕ(dn0)+ϕ(dn1)+ϕ(dn2)+⋯+ϕ(dny]
+
ϕ
(
d
m
2
)
[
ϕ
(
d
n
0
)
+
ϕ
(
d
n
1
)
+
ϕ
(
d
n
2
)
+
⋯
+
ϕ
(
d
n
y
]
+
⋯
⋯
+\phi(d_{m2})[\phi(d_{n0})+\phi(d_{n1})+\phi(d_{n{2}})+\cdots+\phi( d_{ny}]+\cdots\cdots
+ϕ(dm2)[ϕ(dn0)+ϕ(dn1)+ϕ(dn2)+⋯+ϕ(dny]+⋯⋯
ϕ
(
d
m
x
)
[
ϕ
(
d
n
0
)
+
ϕ
(
d
n
1
)
+
ϕ
(
d
n
2
)
+
⋯
+
ϕ
(
d
n
y
]
\phi(d_{mx})[\phi(d_{n0})+\phi(d_{n1})+\phi(d_{n{2}})+\cdots+\phi( d_{ny}]
ϕ(dmx)[ϕ(dn0)+ϕ(dn1)+ϕ(dn2)+⋯+ϕ(dny]
=
[
ϕ
(
d
m
0
)
+
ϕ
(
d
m
1
)
+
ϕ
(
d
m
2
)
+
⋯
+
ϕ
(
d
m
x
]
∗
[
ϕ
(
d
n
0
)
+
ϕ
(
d
n
1
)
+
ϕ
(
d
n
2
)
+
⋯
+
ϕ
(
d
n
y
]
=[\phi(d_{m0})+\phi(d_{m1})+\phi(d_{m{2}})+\cdots+\phi( d_{mx}]*[\phi(d_{n0})+\phi(d_{n1})+\phi(d_{n{2}})+\cdots+\phi( d_{ny}]
=[ϕ(dm0)+ϕ(dm1)+ϕ(dm2)+⋯+ϕ(dmx]∗[ϕ(dn0)+ϕ(dn1)+ϕ(dn2)+⋯+ϕ(dny]
=
F
(
m
)
F
(
n
)
F(m)F(n)
F(m)F(n),即题目得证。
(
f
)
.
(f).
(f).任意整数 n 都是素数的乘积,即
n
=
p
0
k
0
p
1
k
1
⋅
⋅
⋅
p
t
k
t
n =p_0^{k_0} p_1^{k_1} · · · p_t^{k_t}
n=p0k0p1k1⋅⋅⋅ptkt 。可得
F
(
n
)
=
F
(
p
0
k
0
p
1
k
1
⋅
⋅
⋅
p
t
k
t
)
F(n)=F(p_0^{k_0} p_1^{k_1} · · · p_t^{k_t})
F(n)=F(p0k0p1k1⋅⋅⋅ptkt),又由
(
e
)
(e)
(e)中的结论可得
F
(
n
)
=
F
(
p
0
k
0
p
1
k
1
⋯
p
t
k
t
)
F(n)=F(p_0^{k_0} p_1^{k_{1}} \cdots p_t^{k_t})
F(n)=F(p0k0p1k1⋯ptkt)
=
F
(
p
0
k
0
)
F
(
p
1
k
1
)
⋯
F
(
p
t
k
t
)
=F(p_0^{k_0})F(p_1^{k_{1}})\cdots F(p_t^{k_t})
=F(p0k0)F(p1k1)⋯F(ptkt)
又由
(
c
)
(c)
(c)的结论
F
(
p
k
)
=
p
k
F(p^k)=p^k
F(pk)=pk可得
F
(
n
)
=
F
(
p
0
k
0
)
F
(
p
1
k
1
)
⋯
F
(
p
t
k
t
)
=
p
0
k
0
p
1
k
1
⋯
p
t
k
t
=
n
F(n)=F(p_0^{k_0})F(p_1^{k_{1}})\cdots F(p_t^{k_t})=p_0^{k_0} p_1^{k_{1}} \cdots p_t^{k_t}=n
F(n)=F(p0k0)F(p1k1)⋯F(ptkt)=p0k0p1k1⋯ptkt=n即题目得证。