100以内的素数
只要找到除了1和自身能被正处的数就是合数
打印放到内部其实也是比较浪费时间的
100以内是25个素数
也可以不这么做,可以直接输出的
1号算法
其实还有地方改进
奇数才有可能是素数,偶数里,除了2,其他应该都不是素数把
(一个偶数最后除以2,带最后一定是奇数,所以一个合数就是好几个质数的乘积)
把2去掉了,就需要加一个
只选择奇数,效率就提高很多
如果是个合数一定可以找到拿质数把你整除的,因为合数等于几个质数乘积
这两个break意思不一样
x% i ==0 说明找到了合数x
如果大于 x0.5 相当于找到了质数x,都找到开方值还没整除,就是质数
下面else也是找到了质数x
下面就是重复了**
假定一上来,认为x不是质数,设定一个flag
相当于知道了以前的计算结果,就利用了以前的计算结果,能用到以前的结果会大大减少复杂度
合数可以分成几个质数的乘积,质数除了1和本身没有办法分解了
使用datetime,查看效率
记得加括号
加括号
1000的效率
100000的效率
现在优化过的速度反而慢就说明,因为每次i循环,x0.5这个值都需要重新算一边**
修改开方位置,每次只进去计算一次
再次比较,如果我们使用上一次的值,这样的计算时间大大减少
质数的一些性质,大于3的素数只有6n-1和6n+1两种形式
代表大于3的素数一定在6的倍数的前后,17,18,19
https://baike.baidu.com/item/质数/263515?fr=aladdin
概念是这么说的,6的倍数的前后两个数都是质数的话,这一对质数称为孪生质数,
range函数边界值计算一次,从哪开始到哪结束
这个步长我们自己来定一下
x<n作为循环条件
算法一样,但是你的语句多,相对来讲是要耗时多一点
有些排序算法就是,各个场景不同,有的时候占优势,有的时候不占优势
如果把上次质数的计算结果带入进来,会大大提高效率
第一层循环如果没有优化那就找第二层循环,使用上次的结果
利用已有的质数列表,效率不差
这个速度最快