- (1)用C语言编程实现判断输入为偶数的函数,即如果输入为偶数,返回True,否则返回 False;
bool is_even(int num)
{
if (num & 1) return false;
return true;
}
- (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 ;
}
};
- (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 ∴∃q1,q2∈Z,有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,q1q2∈Z.
∴ a ∣ c \therefore a | c ∴a∣c.
(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 ∴∃q1,q2∈Z,有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,n∈Z,有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+nq2∈Z;
∴ c ∣ ( m a + n b ) \therefore c| (ma+nb) ∴c∣(ma+nb) .
- (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);
}
};
- (7)证明任意形如 111 ⋯ 1 ⏟ n \underbrace{111\cdots1}_{n} n 111⋯1的整数都不是平方数,n > 2。
证明:
我们可知 111 ⋯ 1 ⏟ n = 2 n − 1 \underbrace{111\cdots1}_{n} = 2^n-1 n 111⋯1=2n−1,假设存在整数 q q q ,使得 q 2 = 2 n − 1 q^2 = 2^n-1 q2=2n−1;
显然 2 n − 1 ( n > 2 ) 2^n -1( n > 2) 2n−1(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(k∈N) ,于是有:
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=2n−1
整理一下有:
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 2n−1=2k2+2k+1
由于 n − 1 > 1 n-1 > 1 n−1>1,所以 2 n − 1 2^{n-1} 2n−1 为偶数,而等号右边,很明显 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=2n−1 成立,即任意形如 111 ⋯ 1 ⏟ n \underbrace{111\cdots1}_{n} n 111⋯1的整数都不是平方数。命题得证。
证明:
我们可知 111 ⋯ 1 ⏟ n = 2 n − 1 \underbrace{111\cdots1}_{n} = 2^n-1 n 111⋯1=2n−1,假设存在整数 q q q ,使得 q 2 = 2 n − 1 q^2 = 2^n-1 q2=2n−1;
显然 2 n − 1 ( n > 2 ) 2^n -1( n > 2) 2n−1(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(k∈N) ,于是有:
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=2n−1
整理一下有:
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 2n−1=2k2+2k+1
由于 n − 1 > 1 n-1 > 1 n−1>1,所以 2 n − 1 2^{n-1} 2n−1 为偶数,而等号右边,很明显 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=2n−1 成立,即任意形如 111 ⋯ 1 ⏟ n \underbrace{111\cdots1}_{n} n 111⋯1的整数都不是平方数。命题得证。
做完才又发现1111…11不是二进制数:
证明:
假设存在整数 q q q ,使得 111 ⋯ 1 ⏟ n = q 2 \underbrace{111\cdots1}_{n} = q^2 n 111⋯1=q2;
当 q q q 为偶数时,设 q = 2 k , k ∈ N q=2k,k\in\mathbb{N} q=2k,k∈N ,于是
( 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,k∈N, 于是
( 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 111⋯1的整数都不是平方数。