CINTA 第一章 作业

  1. (1)用C语言编程实现判断输入为偶数的函数,即如果输入为偶数,返回True,否则返回 False;
bool is_even(int num)
{

	if (num & 1) return false;

	return true;

}
  1. (3)用 C 语言编程实现一种迭代版本的简单乘法。
class Solution {
public:
    int multiply(int A, int B) {
    if(B == 0 ) return 0 ;
    return ( B& 1 ? A : 0) + multiply(A<<1,B>>1);
    }
};

上面为递归版本,是修改之后的,下面的是初版:

class Solution {
public:
    int multiply(int A, int B) {
        int sum = 0 ;
        for(int i = 0 ; B>>i ;i++)
        {
            if(B&(1<<i))
            {
                sum+= (A<<i);
            }
        }
        return sum ;
    }
};


  1. (4)证明命题1.1:设 a, b, c ∈ Z,如果 a | b,b | c,则 a | c。如果 c | a,c | b,则对任意 m, n ∈ Z,有c | (ma + nb)。

证明:
(1)
∵ \because a | b , b | c ;
∴ ∃ q 1 , q 2 ∈ Z , 有 b = q 1 a , c = q 2 b \therefore \exist q_1,q_2 \in \mathbb{Z}, 有b=q_1a ,c=q_2b q1q2Z,b=q1a,c=q2b
∴ c = q 1 q 2 a ,   q 1 q 2 ∈ Z \therefore c = q_1 q_2 a ,\,q_1q_2 \in \mathbb{Z} c=q1q2a,q1q2Z.
∴ a ∣ c \therefore a | c ac.
(2)
∵ \because c | a ,c | b ;
∴ ∃ q 1 , q 2 ∈ Z , 有 a = q 1 c , b = q 2 c \therefore \exist q_1,q_2 \in \mathbb{Z}, 有a=q_1c ,b=q_2c q1q2Z,a=q1c,b=q2c;
∴ ∀ m , n ∈ Z , 有 m a = m q 1 c , n b = n q 2 c ; \therefore \forall m, n \in \mathbb{Z} ,有ma=mq_1c ,\quad nb=nq_2c ; m,nZ,ma=mq1c,nb=nq2c;
∴ m a + n b = m q 1 c + n q 2 c = ( m q 1 + n q 2 ) c , 且 m q 1 + n q 2 ∈ Z ; \therefore ma+nb =mq_1c+nq_2c =(mq_1+nq_2)c,\quad 且mq_1 +nq_2 \in\mathbb{Z}; ma+nb=mq1c+nq2c=(mq1+nq2)c,mq1+nq2Z;
∴ c ∣ ( m a + n b ) \therefore c| (ma+nb) c(ma+nb) .

  1. (2)给定一个整数 v,如何判断 v 是否 2 的某次方?比如,v = 4 = 22,返回 T rue; v = 9 = 23 + 1 并非 2 的次方,返回 F alse。请写一个 C 语言的函数来实现以上功
    能。
class Solution {
public:
    bool isPowerOfTwo(int n) {
        return  n>0 && ((n&-n) == n);
    }
};
  1. (7)证明任意形如 111 ⋯ 1 ⏟ n \underbrace{111\cdots1}_{n} n 1111的整数都不是平方数,n > 2。

证明:

我们可知 111 ⋯ 1 ⏟ n = 2 n − 1 \underbrace{111\cdots1}_{n} = 2^n-1 n 1111=2n1,假设存在整数 q q q ,使得 q 2 = 2 n − 1 q^2 = 2^n-1 q2=2n1;

显然 2 n − 1 ( n > 2 ) 2^n -1( n > 2) 2n1(n>2)为奇数,所以 q q q 不能为偶数,因为若 q q q 为偶数,则 q 2 q^2 q2 一定为偶数;

我们再假设 q q q 为奇数,则设 q = 2 k + 1 ( k ∈ N ) q= 2k+1(k\in \mathbb{N}) q=2k+1(kN) ,于是有:
q 2 = ( 2 k + 1 ) 2 = 4 k 2 + 4 k + 1 = 2 n − 1 q^2 =(2k+1)^2 =4k^2+4k+1 = 2^n-1 q2=(2k+1)2=4k2+4k+1=2n1
整理一下有:
2 n = 4 k 2 + 4 k + 2 2^n = 4k^2+ 4k+ 2 2n=4k2+4k+2
由于 n > 2 n>2 n>2 ,我们在等号两边同时除以2 有:
2 n − 1 = 2 k 2 + 2 k + 1 2^{n-1} =2 k^2 + 2k+1 2n1=2k2+2k+1
由于 n − 1 > 1 n-1 > 1 n1>1,所以 2 n − 1 2^{n-1} 2n1 为偶数,而等号右边,很明显 2 k 2 + 2 k + 1 2k^2 + 2k +1 2k2+2k+1 为奇数,所以等号两边不可能相等。

所以我们的假设不成立,即 q q q 不能是奇数,又 q q q 不能是偶数,所以不存在整数 q q q 使得 q 2 = 2 n − 1 q^2 = 2^n-1 q2=2n1 成立,即任意形如 111 ⋯ 1 ⏟ n \underbrace{111\cdots1}_{n} n 1111的整数都不是平方数。命题得证。

证明:

我们可知 111 ⋯ 1 ⏟ n = 2 n − 1 \underbrace{111\cdots1}_{n} = 2^n-1 n 1111=2n1,假设存在整数 q q q ,使得 q 2 = 2 n − 1 q^2 = 2^n-1 q2=2n1;

显然 2 n − 1 ( n > 2 ) 2^n -1( n > 2) 2n1(n>2)为奇数,所以 q q q 不能为偶数,因为若 q q q 为偶数,则 q 2 q^2 q2 一定为偶数;

我们再假设 q q q 为奇数,则设 q = 2 k + 1 ( k ∈ N ) q= 2k+1(k\in \mathbb{N}) q=2k+1(kN) ,于是有:
q 2 = ( 2 k + 1 ) 2 = 4 k 2 + 4 k + 1 = 2 n − 1 q^2 =(2k+1)^2 =4k^2+4k+1 = 2^n-1 q2=(2k+1)2=4k2+4k+1=2n1
整理一下有:
2 n = 4 k 2 + 4 k + 2 2^n = 4k^2+ 4k+ 2 2n=4k2+4k+2
由于 n > 2 n>2 n>2 ,我们在等号两边同时除以2 有:
2 n − 1 = 2 k 2 + 2 k + 1 2^{n-1} =2 k^2 + 2k+1 2n1=2k2+2k+1
由于 n − 1 > 1 n-1 > 1 n1>1,所以 2 n − 1 2^{n-1} 2n1 为偶数,而等号右边,很明显 2 k 2 + 2 k + 1 2k^2 + 2k +1 2k2+2k+1 为奇数,所以等号两边不可能相等。

所以我们的假设不成立,即 q q q 不能是奇数,又 q q q 不能是偶数,所以不存在整数 q q q 使得 q 2 = 2 n − 1 q^2 = 2^n-1 q2=2n1 成立,即任意形如 111 ⋯ 1 ⏟ n \underbrace{111\cdots1}_{n} n 1111的整数都不是平方数。命题得证。

做完才又发现1111…11不是二进制数:

证明:

假设存在整数 q q q ,使得 111 ⋯ 1 ⏟ n = q 2 \underbrace{111\cdots1}_{n} = q^2 n 1111=q2;

q q q 为偶数时,设 q = 2 k , k ∈ N q=2k,k\in\mathbb{N} q=2k,kN ,于是
( 2 k ) 2 = 4 k 2 ; 于是 q 2 % 4 = 0 ; (2k)^2 = 4k^2;\\ 于是 q^2 \% 4 = 0; (2k)2=4k2;于是q2%4=0;
q q q 为奇数时,设 q = 2 k + 1 , k ∈ N , q= 2k+1, k \in \mathbb{N}, q=2k+1,kN, 于是
( 2 k + 1 ) 2 = 4 k 2 + 4 k + 1 ; 于是 q 2 % 4 = 1 ; (2k+1)^2 = 4k^2+4k+1;\\ 于是q^2 \%4 =1 ; (2k+1)2=4k2+4k+1;于是q2%4=1;
而1111111%4 = 11%4 =3 ,

所以任意形如 111 ⋯ 1 ⏟ n \underbrace{111\cdots1}_{n} n 1111的整数都不是平方数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值