1.用c语言实现迭代版本的简单乘法
#include<iostream> //使用位运算实现乘法。原型是CINTA书第四页a·b的具体算法
using namespace std;
int multiple(int m, int n)
{
int sum = 0;
while (n != 0)
{
if(n&1)
{
sum = sum + m;
}
n >>= 1;
m <<= 1;
}
return sum;
}
int multiple2(int m, int n)//用加法表示乘法,m*n等价于n个m相加。
{
if (n == 0)
return 0;
else
return m + multiple(m, n - 1);
}
int main()
{
int a, b;
cin >> a >> b;
int s = multiple(a, b);
int s2 = multiple2(a, b);
cout << s<<" " << s2;
return 0;
}
2.证明除法运算算法:对于任意的整数a和b,其中b>0,存在唯一的整数对q(商)和r(余数)使得,
a=qb+r,且0r<b.
存在性:
构造集合
S={a-bk:k Z且a-bk0},集合S为非空集合,由良序原则,存在一个最小元rS,且r=a-qb.
所以a=qb+r,r0.
(1).证明r<b:(使用反证法)假设rb,则r-b=a-qb-b=a-(q+1)b0,显然a-(q+1)bS,即r-bS,r>r-b,r-b才是S中的最小元,与最小元r违背
(2).证明唯一性:(还是反证法)当q和r不唯一时,假设有a=q 1 _1 1b+r 1 _1 1, a=q 2 _2 2b+r 2 _2 2,(其中q 1 _1 1不等于q 2 _2 2,r 1 _1 1不等于r 2 _2 2)
两式相减得到(q 1 _1 1-q 2 _2 2)b=r 2 _2 2-r 1 _1 1,又因为q 1 _1 1和q 2 _2 2是整数,所以q 1 _1