1.用 C 语言编程实现一种迭代版本的简单乘法
#include<stdio.h>
int mult(int a,int b)
{
int temp = a;
for (int i = 1; i < b; i++)
{
a += temp;
}
return a;
}
int main()
{
printf("%d", mult(5, 6));
return 0;
}
2证明定理1.1
证明存在性:
构造集合
S = {a − bk : k ∈ Z 且 a − bk ≥ 0}.
显然,集合 S 非空。由良序原则,存在一个最小元 r ∈ S,且 r = a − qb。因此,
a = qb + r, r ≥ 0。
若r>=b,则可设r=b+m,其中m ∈ Z 。则a=qb+r=(q+1)b+m。不符合商和余数的原则。
所以r<b.
证明唯一性:
假设存在不止一个整数对满足条件,则可设:
a=q1b+r1
a=q2b+r2
不妨设q1>q2,显然可得r1<r2.
q1b+r1=q2b+r2
(q1-q2)*b=r2-r1
b=(r2-r1)/(q1-q2)
因为0<=r1<b,0<=r2<b,r1<r2;所以0<r2-r1<b.
因为q1,q2为整数,q1>q2;所以q1-q2>=1.
因为0<r2-r1<b,q1-q2>=1,所以(r2-r1)/(q1-q2)<b,与b=(r2-r1)/(q1-q2)矛盾。
因此,假设不成立。唯一性得证。
3.用 C 语言编程实现一种迭代版本的gcd算法
int gcd(int a, int b)
{
while (b != 0)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
迭代版本egcd算法
void egcd(int a, int b)
{
int r0 = 1, r1 = 0, s0 = 0, s1 = 1;
while (b)
{
int q = a / b;
int temp = a;
a = b; b = temp % b;
temp = r0;
r0 = r1; r1 = temp - q * r1;
temp = s0;
s0 = s1; s1 = temp - q * s1;
}
printf("gcd=%d\n",a);
printf("r=%d\n",r0);
printf("s=%d\n",s0);
}
函数
//输入:一个正整数n;输出:大于等于1,小于n,且与n互素的正整数的个数。
#include<stdio.h>
int gcd(int a, int b)
{
while (b != 0)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
int main()
{
int n = 0;
int sum = 0;
scanf("%d", &n);
for (int i = 1; i < n; i++)
{
if (gcd(n, i) == 1)
sum++;
}
printf("%d", sum);
return 0;
}