linux c一站式编程 部分答案

来源:互联网 发布:人工智能美女机器人 编辑:程序博客网 时间:2024/05/19 00:39

1. 写一个表达式,分别表示整形变量x的个位和十位

x=x%10

x=x%100/10


2. 假设变量x和n是两个正整数,正常情况下,x/n这个表达式的结果是向下取整,那么如果希望向上取整应该写什么表达式呢

(x+n-1)/n

3.编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),使用Euclid算法:

a.如果a除以b能整除,则最大公约数是b。

b. 否则,最大公约数等于b和a%b的最大公约数。

Euclid算法的证明如下:

对任意m,n属于N,证明gcd(m,n)=gcd(n,m mod n)


先介绍一个引理:

假设 k|a, k|b,则对任意的 x,y  ∈ Z, k|(xa+yb)均成立.

证明:

  k|a => a=pk, k|b => b==qk (其中 p,q ∈ Z)

  于是有 xa+yb=xpk+yqk=(xp+yq)k

  因为 k|(xp+yq)k, 所以 k|(xa+yb)


证明:

令k=gcd(m,n),则k|m并且k|n(k|m表示m能被k整除);

令j=gcd(n, m mod n)则j|n并且j| (m mod n);

对于m,可以用n表示为m=pn+(m mod n);

由引理可知j|m(其中x=p,y=1),又j|n,于是j是m和n的公约数(但不一定是最大的);

因为k是m和n的最大公约数,所以必有k>=j;

通过另一种表示形式:(m mod n)=m-pn,同理可得:

k|(m mod n),有k|n,于是k是(m mod n)和n的公约数(也不一定是最大的);

同样由j是n和(m mod n)的最大公约数可以得到j>=k;

由常识,得出结论k=j,

即gcd(m,n)=gcd(n,m mod n).得证。


4. 用rand函数生成[10,20]之间的随机数,表达式应该怎么写?




0 0
原创粉丝点击