CINTA 第一次作业

第一次作业 第一次作业 第一次作业
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=aqb,得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>q20<=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=(r2r1)/(q1q2)
而因为 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 而因为q1q2都是整数,所以q1q2>=1,r2r1<b,所以(r2r1)/(q1q2)<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.假设ga1(modm)gb1(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,ga1(modm)gb1(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)s1(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)=xx=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 xa/dxb/d,那么xdaxdb,显然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 xa/dxb/d,那么xdaxdb,显然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

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值