第一次作业
第一次作业
第一次作业
1
、用
C
语言编程实现一种迭代版本的简单乘法。
1、用 C 语言编程实现一种迭代版本的简单乘法。
1、用C语言编程实现一种迭代版本的简单乘法。
#include <iostream>
using namespace std;
int multiply(int a, int b) {
int result = 0;
int sign = (a < 0) ^ (b < 0) ? -1 : 1;
while (b > 0) {
if (b & 1) {
result += a;
}
a <<= 1; // a 左移一位,相当于乘以2
b >>= 1; // b 右移一位,相当于除以2
}
return result * sign;
}
int main() {
int a, b;
cout << "请输入两个整数: ";
cin >> a >> b;
int product = multiply(a, b);
cout << "乘法结果: " << product << endl;
return 0;
}
2
、给出定理
1.1
(
除法算法
)
的完整证明。
2、给出定理1.1(除法算法)的完整证明。
2、给出定理1.1(除法算法)的完整证明。
证明:要证明定理
1.1
,需要证明两点:存在性、必要性。
证明:要证明定理1.1,需要证明两点:存在性、必要性。
证明:要证明定理1.1,需要证明两点:存在性、必要性。
先证存在性:给定一集合
先证存在性:给定一集合
先证存在性:给定一集合S={a-kb|k\in Z且a-kb>0}
根据良序原理,集合
S
存在一最小值
r
=
a
−
q
b
,得
a
=
q
b
+
r
根据良序原理,集合S存在一最小值r=a-qb,得a=qb+r
根据良序原理,集合S存在一最小值r=a−qb,得a=qb+r
其中,
0
<
=
r
<
b
,否则存在一个更小的
r
1
=
a
−
(
q
+
1
)
b
其中,0<=r<b,否则存在一个更小的r_{1}=a-(q+1)b
其中,0<=r<b,否则存在一个更小的r1=a−(q+1)b
再证明唯一性:不妨假设其不唯一,
a
=
q
1
b
+
r
1
,
a
=
q
2
b
+
r
2
再证明唯一性:不妨假设其不唯一,a=q_{1}b+r_{1},a=q_{2}b+r_{2}
再证明唯一性:不妨假设其不唯一,a=q1b+r1,a=q2b+r2
其中,
q
1
>
q
2
,
0
<
=
r
1
<
r
2
<
b
其中,q_{1}>q_{2},0<=r_{1}<r_{2}<b
其中,q1>q2,0<=r1<r2<b
由
q
1
b
+
r
1
=
q
2
b
+
r
2
,解得
b
=
(
r
2
−
r
1
)
/
(
q
1
−
q
2
)
由q_{1}b+r_{1}=q_{2}b+r_{2},解得b=(r_{2}-r_{1})/(q_{1}-q_{2})
由q1b+r1=q2b+r2,解得b=(r2−r1)/(q1−q2)
而因为
q
1
、
q
2
都是整数,所以
q
1
−
q
2
>
=
1
,
r
2
−
r
1
<
b
,所以
(
r
2
−
r
1
)
/
(
q
1
−
q
2
)
<
b
而因为q_{1}、q_{2}都是整数,所以q_{1}-q_{2}>=1,r_{2}-r_{1}<b,所以(r_{2}-r_{1})/(q_{1}-q_{2})<b
而因为q1、q2都是整数,所以q1−q2>=1,r2−r1<b,所以(r2−r1)/(q1−q2)<b
矛盾,假设不成立,所以唯一。
矛盾,假设不成立,所以唯一。
矛盾,假设不成立,所以唯一。
3 、用 C 语言编程实现一种迭代版本的 g c d 算法和一种 e g c d 算法。利用 g c d 算法,写程序完成以下函数的功能。输入:一个正整数 n ;输出:大于等于 1 ,小于 n ,且与 n 互素的正整数的个数。 3、用 C 语言编程实现一种迭代版本的gcd算法和一种egcd算法。利用gcd算法,写程序完成以下函数的功能。输入:一个正整数n;输出:大于等于1,小于n,且与n互素的正整数的个数。 3、用C语言编程实现一种迭代版本的gcd算法和一种egcd算法。利用gcd算法,写程序完成以下函数的功能。输入:一个正整数n;输出:大于等于1,小于n,且与n互素的正整数的个数。
#include <iostream>
using namespace std;
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int egcd(int a, int b, int& x, int& y) {
if (a == 0) {
x = 0;
y = 1;
return b;
}
int x1, y1;
int gcd = egcd(b % a, a, x1, y1);
x = y1 - (b / a) * x1;
y = x1;
return gcd;
}
int calculateCoprimes(int n) {
int count = 0;
for (int i = 1; i < n; i++) {
if (gcd(n, i) == 1) {
count++;
}
}
return count;
}
int main() {
int n;
cout << "请输入一个正整数:";
cin >> n;
int result = calculateCoprimes(n);
cout << "与" << n << "互素的正整数的个数为:" << result << endl;
return 0;
}
6.
假设
g
a
≡
1
(
m
o
d
m
)
且
g
b
≡
1
(
m
o
d
m
)
,请证明
g
g
c
d
(
a
,
b
)
≡
1
(
m
o
d
m
)
。
6.假设 g^{a}\equiv 1\pmod m且 g^{b}\equiv 1\pmod m,请证明 g^{gcd(a,b)}\equiv 1\pmod m。
6.假设ga≡1(modm)且gb≡1(modm),请证明ggcd(a,b)≡1(modm)。
证明:根据
B
e
ˊ
z
o
u
t
定理,
g
c
d
(
a
,
b
)
=
a
r
+
b
s
,所以
证明:根据B\acute{e}zout定理,gcd(a,b)=ar+bs,所以
证明:根据Beˊzout定理,gcd(a,b)=ar+bs,所以
g
g
c
d
(
a
,
b
)
=
g
a
r
+
b
s
=
(
g
a
)
r
⋅
(
g
b
)
s
,
而
g
a
≡
1
(
m
o
d
m
)
且
g
b
≡
1
(
m
o
d
m
)
,
g^{gcd(a,b)}=g^{ar+bs}=(g^{a})^{r}·(g^{b})^{s},而g^{a}\equiv 1\pmod m且 g^{b}\equiv 1\pmod m,
ggcd(a,b)=gar+bs=(ga)r⋅(gb)s,而ga≡1(modm)且gb≡1(modm),
所以,
(
g
a
)
r
⋅
(
g
b
)
s
≡
1
(
m
o
d
m
)
所以,(g^{a})^{r}·(g^{b})^{s}\equiv 1\pmod m
所以,(ga)r⋅(gb)s≡1(modm)
即
g
g
c
d
(
a
,
b
)
≡
1
(
m
o
d
m
)
即 g^{gcd(a,b)}\equiv 1\pmod m
即ggcd(a,b)≡1(modm)
8.
证明:如果
g
c
d
(
a
,
b
)
=
d
,则
g
c
d
(
a
/
d
,
b
/
d
)
=
1
。
8.证明:如果gcd(a,b)=d,则gcd(a/d,b/d)=1。
8.证明:如果gcd(a,b)=d,则gcd(a/d,b/d)=1。
证明:不妨设
g
c
d
(
a
,
b
)
=
d
,且
g
c
d
(
a
/
d
,
b
/
d
)
=
x
,
x
≠
1
。
证明:不妨设gcd(a,b)=d,且gcd(a/d,b/d)=x,x\neq 1。
证明:不妨设gcd(a,b)=d,且gcd(a/d,b/d)=x,x=1。
即
x
∣
a
/
d
,
x
∣
b
/
d
,那么
x
d
∣
a
,
x
d
∣
b
,显然
x
d
>
d
,所以
g
c
d
(
a
,
b
)
=
x
d
即x|a/d,x|b/d,那么xd|a,xd|b,显然xd>d,所以gcd(a,b)=xd
即x∣a/d,x∣b/d,那么xd∣a,xd∣b,显然xd>d,所以gcd(a,b)=xd
矛盾,假设不成立。
矛盾,假设不成立。
矛盾,假设不成立。
cd(a,b)=d,且gcd(a/d,b/d)=x,x\neq 1。$
即
x
∣
a
/
d
,
x
∣
b
/
d
,那么
x
d
∣
a
,
x
d
∣
b
,显然
x
d
>
d
,所以
g
c
d
(
a
,
b
)
=
x
d
即x|a/d,x|b/d,那么xd|a,xd|b,显然xd>d,所以gcd(a,b)=xd
即x∣a/d,x∣b/d,那么xd∣a,xd∣b,显然xd>d,所以gcd(a,b)=xd
矛盾,假设不成立。
矛盾,假设不成立。
矛盾,假设不成立。
即如果
g
c
d
(
a
,
b
)
=
d
,则
g
c
d
(
a
/
d
,
b
/
d
)
=
1
。
即如果gcd(a,b)=d,则gcd(a/d,b/d)=1。
即如果gcd(a,b)=d,则gcd(a/d,b/d)=1。