目录
1、经典数学问题
(1)斐波那契数列
1)数学特点
数列中的两项之和等于后一项。
数学函数定义:
2)代表问题:兔子生崽
第一个月兔子没有繁殖能力,所以还是一对;两个月后生下一对兔子,共有两对;三个月后,老兔子生下一对,小兔子还没有繁殖能力,所以一共是三对,以此类推,可以列出下表:
(2)最大公约数和最小公倍数
1)最小公倍数
最小公倍数 = 输入的两个数之积除以它们的最大公约数;
2)求最大公约数:辗转相除法(欧几里德算法)
1--证明
设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,
令r=a mod b
设a=kc,b=jc,则k,j互素,否则c不是最大公约数
据上,r=a-mb=kc-mjc=(k-mj)c
可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。
2--思路
第1步:a ÷ b,令r为所得余数(r≥0)
第2步:
互换:置 a←b,b←r,并返回第一步。
(3)质数(素数)
1)定义
只有两个正因数(1和自己)的自然数,
2)判断方法
用一个数分别去除2到这个数的平方根,如果能被整除, 则表明此数不是素数,反之是素数。
注:
1--按照质数的定义,应该分别用2到自己减一的这些值去进行运算,但是为了提高运算效率,只需要到平方根即可。
2--如果数c不是素数,则还有其他因子,其中的因子,假如为a,b,其中必有一个大于sqrt(c) ,一个小于sqrt(c) 。
2、经典“底层”问题
(1)大端与小端
解析:
1)联合体(共用体union)特点:结构中的成员共享内存空间
2)大端、小端
1--本质
数据存储方向,包括在socket网络通信中涉及到的字节序问题
2--数据存储方向
大端:数据低位存在地址高位
小端:数据低位存在地址低位
3-由主控架构设计者决定
PC(X86-英特尔):小端
嵌入式设备(ARM):可通过修改底层寄存器的值设定大小端,默认小端
3)解题
联合体成员x[0] = 10,x[1] = 2,在X86_64中式按照小端存储的,
数据实际存储就是:
00000000 00000000 00000010 00001010,即522
参考