2019/09/11 03-斐波那契数列、素数、猴子吃桃问题精讲

https://baike.baidu.com/item/斐波那契数列/99145?fr=aladdin

斐波那契数列是面试必考题之一在这里插入图片描述
也称为兔子繁殖问题,黄金分割数列,应用极广,python的官网的列子就是斐波那契数列,
后一项的值等于前两项的合,前两项必须指定,
第一项是1 ,第二项也是1,特殊项是0
第一项是0,需要记住

在这里插入图片描述
100以内也就到89在这里插入图片描述在这里插入图片描述
我们暂时不用通项公式,用最原始的方式来算在这里插入图片描述
一般起名就叫fib,斐波那契数列Fibonacci sequence
求一百以内的斐波那契数列
a=原来的b,b=a+b的c,颠倒过来就出事情了在这里插入图片描述
在这里插入图片描述在这里插入图片描述
这种写法就用到结构了在这里插入图片描述
可以加个序号在这里插入图片描述
跟百度百科的定义一致在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
11就看不到了
在这里插入图片描述
把这个换成101就可以了在这里插入图片描述在这里插入图片描述在这里插入图片描述
这个条件是否可以换个地方在这里插入图片描述
一定要有初始值才能迭代在这里插入图片描述
一般问斐波那契数列所有的值,要么让你求第几项的值,有可能是笔试,也有可能是上机题,
记住第一项是0,第二项是1,第三项是1,往后都是迭代
在这里插入图片描述在这里插入图片描述在这里插入图片描述
求10万以内的所有素数,
质数表的质数又称素数。指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
其实问你的是100以内可以不考虑速度问题,但是10万就需要你考虑了,规模大了,算法低效肯定不行
面试题

x=15797给定一个数,不是偶数,不能被3除,不能被5除,也不是偶数
现在把大概的架子写完,然后改成10万以内
range一般都是从2 ,到这个数-1的位置
x和i取模=0,就不是素数,是合数
就break跳出

在这里插入图片描述
这样子是可信的
在这里插入图片描述
下面就需要循环了,1不算,其实从2 开始,到100以内
拿x挨个去这么试,查看是否一开始有遗漏
在这里插入图片描述
下面就需要优化了,2也没必要,就跳过,直接3试试在这里插入图片描述
查看这一块是否有优化,(3,100,2)把偶数去掉了在这里插入图片描述
查看规律其实,100/2等于把100/50也测了一遍了
所以的对称点,100/10

在这里插入图片描述
**乘法的中点,100/10,等于平方的开方
**在这里插入图片描述
但是range无法带小数点,就需要使用int
在这里插入图片描述
int是做取整,2.5=2,整数部分往往会小一点,所以以防万一额外+1在这里插入图片描述
现在这样可以大大减少迭代的次数在这里插入图片描述
总共有9592个在这里插入图片描述
查看是否还能优化
质数/素数还有定理,如果这个数大于10,质数一定最后的十进制,最后的最低位一定是13 7
在这里插入图片描述
基本上1,3,7,9都是质数
质数中的5 ,基本上5最后都能被5整除
在这里插入图片描述
如果能被5整除的就是需要过滤掉的,但是需要大于10以后,不应该是break,因为break跳出循环了,就没有循环了,所以应该是continue在这里插入图片描述
试想一下这个%5能否改掉在这里插入图片描述
这个代码效率不低了,因为后面的2代表,任何素数都不能被2整除,直接跳过即可
上面的(3,10000,2)奇数不要了
下面是(1,int(x
0.5)+1,2)除的过程中,连偶数都不要了
在这里插入图片描述
记的时候中间可以不记,但是记得两个部分,奇数部分可以不要
外面的去掉偶数,奇数不能被偶数整除,所以在里面的循环也罢偶数部分去掉

在这里插入图片描述
求质数(素数prime number)一定会问在这里插入图片描述在这里插入图片描述
这两个死记是 3,否则出事在这里插入图片描述在这里插入图片描述在这里插入图片描述
算大素数,非常耗时,密码学里面。大素数就是经常用到的东西

要计算上面算法的时间,需要学习一个库,datetime,是个模块,模块名
datetime模块名.datetime类名
在这里插入图片描述
delta在数学中表示增量在这里插入图片描述
查看帮助在这里插入图片描述
.点好的优先级很高,就需要把前面算的括号起来
timedelta里面有个total_seconds对象
124s过去了

在这里插入图片描述在这里插入图片描述** _下划线表示丢弃的变量,表示这个变量在python中不关心
第一种算法两个偶数都没去掉,无用功有点多**在这里插入图片描述
第二种方法重新计时
count是在记循环多少次
在这里插入图片描述
每个方法各算10次10万以内的素数
第2种明显节省时间
只是把偶数去掉了,在整除的时候也是把偶数去掉了,就提高了这么多效率
在这里插入图片描述
这其实是个手表时间,实际上cpu还在忙其他事情在这里插入图片描述
经典面试题有可能会被问到
**假定总数是x个
第一次d1 吃了一半 x//2 -1
第二次d2 d1//d2 -1
.。。。。
d9 d9//2 -1 ==1(第9天其实就剩一个了)
d10 1 **

从1开始往前推‘,9行9次
有限次数的循环用for
无限次数循环用while

在这里插入图片描述在这里插入图片描述
以后可能需要用递归的来写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值