关键字
- 计算数论: 时间复杂度 空间复杂度 质数 合数 sieve of eratosthenes ,质数定理 条件概率 贝叶斯理论
睡梦——>昨晚:
昨晚由于某些原因失控了,做了一些此刻我认为不该做的事情。但,有一点我没做了:玩王者荣耀。以前的时候,遇到这种导致"失眠"的情况,我会选择王者荣耀来让自己冷却。这一点,值得我深化:不要再以任何借口去玩王者荣耀,它对我来说就是毒品。
昨日回顾:
LEARN:
刻意训练难点, 组块化图书馆构建复杂知识体系,神经递质决定了我们做事情的态度,交替学习让不同知识组块间交叉得以有创新的基础。
SYNTAX Python3 :
输出,语法:标识符,数据结构,操作符,变量
控制流:if while.for , 函数:5种参数
模块
今日回顾:
计算数论:
时间复杂度 空间复杂度
考虑时间(运行布数)和空间(存储)随着数据的增大或者增多所带来的变化。
时间复杂度大致有以下:
O(n) = 1, lnx, x xlnx , x^2, x^3....
质数 合数
质数(prime):
任何大于1的整数,如果只能被1和它自身整除,则为质数(素数),换句话说,除了1和它自身,质数无其他因数。
简单质数如下:2 3 5 7 11.....质数有无限个。
除2以外,质数都是奇数。——> 除2以外,偶数都不是质数。
除2和3以外,其他所有的质数都满足 6k+1,6k-1 (或者6k+5),且k>1,k为整数。
合数(composite)
对于大于一的正整数,不是质数就是合数。
合数至少有四个因数。
任何合数都能被分解为多个质数相乘。
合数=质数x质数x质数
质数判定
对于一个给定的正整数N,如何判定其为质数(合数)?
- 2到Root(N)区间,不存在任何一个整数能整除N,则N为质数(更容易理解:在这个区间,只要存在一个整数能整除N,则N为合数)
伪代码(以下Root(N) 表示N的平方根):
Def is_Prime(N):
flag = 0
For num from 2 to Root(N):
IF num能整除N
flag = 1
break
IF flag = 0
print N为质数
Else
print N为合数
总结一下存在任何一个 就成立 与 不存在任何一个才成立的代码思路:
flag = 0
for 循环
if conditionTrue
flag = 1
break
if flag = 0
print 不存在任何一个元素符合循环条件
else
print 只要有一个元素符合循环条件
考虑到时间复杂度,优化:
- 3到Root(N)区间,没有任何一个奇数能整除N,则N为质数:
Def is_Prime(N):
flag=0
For num from 2 to Root(N), step=2 :
IF num能整除N
flag=1
break
IF flag=0
printN为质数
Else
print N为合数
具体实现请点击
sieveoferatosthenes:
埃拉托斯特尼筛 :
一个简单的筛选100以内素数的方法:
- 画一个10*10表格,去掉1
- 去除2的倍数
所有的偶数都不是质数/素数,所以去掉2的倍数(另一个角度是2的倍数2N 可由除1与2N外的其他质数相乘而得) - 去除3的倍数,同2
- 去除5的倍数,7的倍数
- 剩余的数便是所有100以内的质数
-(补充:判断一个数是不是质数,100为例
) 判断整除范围,100^(1/2)=10,from2to10(此处可以考虑两个集合,①10作为分界点:10*10 ,若10左边的某个数能整除100,则商一定在10的右边。换句话说,判断是否为质数转化为判断100是不是合数,而合数很容易判断,只要100能被除了1与100的某一个数整除,就可以判定他是合数。根据①可知我只需要考虑2到10之间的数就可以。
更进一步,只需要考虑2到10之间的质数能否整除。)
其实以上去除倍数 可归结为去除10( 为100的平方根 )以内所有质数的倍数
灵感:快速查找N^2 范围内的所有质数
- 先做一个N*N的表格,去掉1
- 用类似的方法找到N以内的所有质数(根号N
- 根号N的表格 )
- 去除N以内所有质数的倍数,剩下的便是质数
- 应用:10以内的质数很容易记住:2 3 5 7
100以内的根据1010表格
10000以内的根据100100表格
伪代码:
# 根据埃拉托斯特尼筛,筛选整数 n*n 以内的所有质数
List = range(n*n)
For num from 2 to n:
标记n*n以内所有num的倍数(2倍及2倍以上)为marked
unmarked便是所有的质数
质数密度曲线(需要再认真看一边视频)
质数数量(纵轴)——筛选空间N(横轴)曲线:
当N越来越大,趋向于无穷大时,其曲线无限接近y=ln(x)的曲线
质数密度= 质数数量/筛选空间
1/ln(x)
质数定理
当N无穷大时,
条件概率
P(A|B)= P(AB)/P(B)
推导
P(AB)=P(A|B)/P(B)
P(BA)=P(B|A)/P(A)
因为
P(AB)=P(BA)=P(A∩B)
所以
P(A|B)/P(B)=P(B|A)/PA
所以P(A|B) / P(B|A) = P(A) /P(B)
P(A|B)条件概率:在 B发生的情况下,A发生的概率
P(AB) 联合概率,A与B同时发生的概率