CINTA hw1

发布时间 2023-09-20 00:06:04作者: Sophiawxr

1

点击查看代码
#include<iostream>

using namespace std;

int multiply(int a, int b) 
{
    int result = 0;
    while (b > 0) 
    {
    
        if (b % 2 == 0) 
        {
            a *= 2;
            b /= 2;
        } 
        else 
        {
            result += a; 
            a *= 2;
            b /= 2;
        }
    }
    return result; 
}

int main() 
{
    int a;
    int b;
    cin>>a>>b;
    int res = multiply(a, b);
    cout << "The result is: " << res << endl;
	system("pause");
    return 0;
}

运行结果

image

2

证明定理1.1:对任意给定的整数 a 和 b,其中 b > 0,存在唯一的整数对 q(商)和 r(余数)使得a = qb + r,且 0 ≤ r < b。

证明(数学归纳法):
① a=0 时,存在q=0,r=0满足条件。
② a=k 时,设存在唯一的整数对 qk和 rk 使得a = qkb + rk
证明a=k+1时,存在唯一的整数对qk+1与rk+1使上式依旧成立。
由a = qb + r有k+1=qb+r,得qb=k+1-r。
由假设(存在唯一的整数对 qk和 rk 使得a = qkb + rk )有qkb=k+1-rk
由此证明了a=k+1的时候存在唯一的整数对qk,rk满足该定理。
得证。

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 = a % b;
        a = b;
        b = temp;
    }
    return a;
}
void egcd(int a, int b, int &x, int &y) 
{
    if (b == 0) 
	{
        x = 1;
        y = 0;
        return;
    }
    egcd(b, a % b, y, x);
    y -= a / b * x;
}

int primes(int n) 
{
    int count = 0;
    for (int i = 2; i < n; i++) 
	{
        if (gcd(i, n) == 1) 
		{
            count++;
        }
    }
    return count;
}

int main() 
{
    int n;
    cout << "请输入一个正整数n:";
    cin >> n;
    int result = primes(n);
    cout << "小于" << n << "的与n互质的正整数个数为:" << result+1 << endl;
	system("pause");
    return 0;
}

点击查看图片

4

§2/6
假设 ga ≡ 1 (mod m) 且 gb ≡ 1 (mod m),请证明 ggcd(a,b) ≡ 1 (mod m)。

证明:

由Bèzout,存在整数r,s,使得:

gcd(a,b) = ar + bs

两边取g的指数:
g(gcd(a,b)) = g(ar+bs)
= (ga)r * (gb)s

又由于已知ga ≡ 1 (mod m) 和 gb ≡ 1 (mod m)
所以,(ga)r ≡ 1 (mod m) 和 (gb)s ≡ 1 (mod m)

g(gcd(a,b)) ≡ 1 (mod m)

得证。

5

§2/8
如果 gcd(a, b) = d,则 gcd(a/d, b/d) = 1

已知gcd(a, b) = d
a,b可以表示为:
a = md
b = nd
其中m,n为整数
将a,b代入gcd(a/d, b/d):
gcd(a/d, b/d)
= gcd(m, n)
因为d是a和b的最大公因数
所以m和n互质,gcd(m,n) = 1

故:
如果gcd(a, b) = d
则gcd(a/d, b/d) = 1

得证。