1.用C语言实现一种迭代版本的简单乘法。
如下 multiply(int na, int nb)
函数即为所求函数。
/* 简单乘法器(程序默认输入,输出均不会发生溢出)
* 输入:两个整数 na, nb
* 输出:na * nb 的结果
*/
#include<stdio.h>
typedef long long ll;
ll multiply(int na, int nb)
{
if(b == 0) return 0;
ll ans = 0;
do {
if (nb & 1) ans += na;
na *= 2;
} while (nb >>= 1);
return ans;
}
int main()
{
int na = 0, nb = 0;
ll mul = 0;
printf("Please enter 2 numbers to get them multiplied: ");
scanf("%d%d", &na, &nb);
mul = multiply(na, nb);
printf("The answer of %d * %d is: %d", na, nb, mul);
return 0;
}
证明题
2.证明命题 1.1
证明:
第一部分
设 ∃ k , k 0 ∈ Z \exist\ k,k_0\in \Z ∃ k,k0∈Z,使得 b = k a , c = k 0 b b=ka,\ c=k_0b b=ka, c=k0b,
显然
c = k 0 k a , k 0 k ∈ Z c = k_0ka,k_0k\in\Z c=k0ka,k0k∈Z。
证毕。
第二部分
设 ∃ k , k 0 ∈ Z \exist\ k,k_0\in \Z ∃ k,k0∈Z,使得 a = k c , b = k 0 c a=kc,\ b=k_0c a=kc, b=k0c,
显然
m a + n b = m k c + n k 0 c = ( m k + n k 0 ) c , m k + n k 0 ∈ Z ma+nb = mkc+nk_0c= (mk+nk_0)c,mk+nk_0 \in \Z ma+nb=mkc+nk0c=(mk+nk0)c,mk+nk0∈Z
证毕。
3.完成定理 1.1 的证明(除法算法)
证明:
存在性
构造集合
S = { a − b k : k ∈ Z 且 a − b k ≥ 0 } . S = \{ a-bk:k \in \Z 且 a-bk \geq 0 \}. S={a−bk:k∈Z且a−bk≥0}.
显然,集合 S S S 非空。由良序原则, 存在一个最小元 r ∈ S r \in S r∈S ,且 r = a − q b r = a- qb r=a−qb。因此, a = q b + r , r ≥ 0 a=qb+r,r\geq0 a=qb+r,r≥0 。
假设存在
r
0
≥
b
r_0\geq b
r0≥b,使得
a
=
q
0
b
+
r
0
a = q_0b+r_0
a=q0b+r0,
那么显然存在整数
k
,
q
和
r
k , q 和 r
k,q和r 使得
a
=
q
0
b
+
r
0
=
q
0
b
+
k
b
+
r
=
(
q
0
+
k
)
b
+
r
=
q
b
+
r
,
r
<
0
。
a= q_0b+r_0 = q_0b+kb+r=(q_0+k)b+r =qb+r, \ \ r <0。
a=q0b+r0=q0b+kb+r=(q0+k)b+r=qb+r, r<0。
证毕。
唯一性
设对于整数对
q
,
r
∈
Z
q,r \in \Z
q,r∈Z,
∃
q
0
≠
q
,
r
0
≠
r
∈
Z
\exist\ q_0\neq q,r_0 \neq r\in \Z
∃ q0=q,r0=r∈Z ,使得对于任意给定
a
,
b
>
0
∈
Z
,
使
得
a
=
q
b
+
r
,
a
=
q
0
b
+
r
0
a,b>0 \in \Z, 使得\ \ a = qb+r, a=q_0b+r_0
a,b>0∈Z,使得 a=qb+r,a=q0b+r0 同时成立。
显然,
∃
k
∈
Z
,
\exist k \in \Z,
∃k∈Z, 使得
k
=
q
−
q
0
k = q-q_0
k=q−q0,
故有
a
=
q
b
+
r
=
(
q
0
+
k
)
b
+
r
=
q
0
b
+
k
b
+
r
=
q
0
b
+
r
0
a = qb+r =(q_0+k)b+ r = q_0b+kb+r = q_0b+r_0
a=qb+r=(q0+k)b+r=q0b+kb+r=q0b+r0。
显然
r
0
=
k
b
+
r
r_0=kb+r
r0=kb+r。
k
>
0
时
,
r
0
≥
b
;
k
<
0
时
,
r
0
<
0
;
k > 0时,r_0\geq b;\ k<0时,r_0<0;
k>0时,r0≥b; k<0时,r0<0;
当且仅当
k
=
0
时
,
0
≤
r
=
r
0
<
b
k = 0时,0\leq r= r_0 < b
k=0时,0≤r=r0<b。
显然,此时
q
=
q
0
q= q_0
q=q0。
证毕。