00:00
再简单的说一下这个质数的练习啊,我们来看看还有没有什么可以优化的空间了,那这块我们要优化,刚才我们提了一点,我们要考虑什么呀,I的值现在我们是接小于,哎,如果是偶数,如果是一个非质数,我没啥要说的,因为我在这就已经干嘛了,已经break了,就已经用好了,我们要考虑什么呢?我要我们要考虑的是质数的情况,假如说我们刚才打印的这个质数有谁呢?有一个我我我们还是给他。把这质数啊,先给它打印出来啊,给它打印出来,这里边儿呢,我还是100啊100我这保存。边开边看们一看,诶,最后一个我们这100以内最大是不是就就97啊,哎,那我们来想一想,对于97这种情况,也就是说我的I的值是97,那I的值是97的时候,我这个阶应该是几啊。是不是二到96啊,我要分别去检查二到96之间这些数是不是能被90能整除什么呀?97对吧?哎,能整除97对吧,那我们想想这堆数是不是有点多呀。
01:07
多不多呀,你说96还用不用看了,不用看了吧,96根本就压根是不是就不可能了呀,我除了一最小是不就二了呀,二乘96是不都将近200了,哎,所以是不可能的,那咱们这块97你要小明白,咱们说一小点数,比如说我来一什么呢?我们来一个,嗯,19 19也是个这个质数对吧,19我们来说,当我们去检查19的时候,它需要检查什么呀?2341直到我们这个是不是18呀?诶,那我们假设啊,假设我们先说如果19完检查二,19检查完二了,那我们说19除以二应该等于几。是不是应该等于9.5啊,诶,那我们说了,如果19除以二二了,9.5以后的值还有没有可能是19的因数十有可能。没有可能吧,一点可能也没有了,为什么呀,因为最小的是那个一,然后是不是就二了呀,你十跟什么乘他也不可能得什么了。
02:09
得19了,这能理解了吗?所以9.5以后的值,我是不是没有必要再去?再去检查了,能理解了吗?哎,那我们想想这值我能不能进一步给他优化呀,我们发现什么呢?我会发现我们这个因数,这什么叫因数吧。这数叫因数吗?我们说36,六乘以六是不是得36啊,这六是不是就是36的因数啊?哎,那四乘以九是不是36啊,四和九是不是也三六的因数啊,你这因数都是什么呀?是不是都是一对一对的呀?咱们还是拿这个36举例子,36的因数,比如说我们36,一还有谁呀,36,然后呢,二还有谁啊,18,然后32,然后四九,然后五就没了,是吧,然后是六六,诶注意在这一刻它的两个因数是相等的,那我问你到这儿了,往下还有没有新的因数了,没了吧,你再往下找是不是还得找找重的了,再找又是谁了,又是90 28是不是36啊?比如说在六往下,实际上对于36来说是不是都是重复的因数了,也就说对于36来说,我要找因数,找到谁就行了,是不是找到六就行了呀,那同样,那对于97来说,我。
03:28
用不用非得找到96啊,不用吧,那找谁合适。36这个六对于36来说是谁呀?是不是就是。根号下36啊,同样我要想找97的话,我是不是找到根号下97就行了呀,因为什么呀,因为根号下97以后,即使有因数,那是不是跟前边它就是什么了重复的,如果到号97了,你还没有因数证明,你还有没有新的因数了,是不是就没了呀,也就说根号97以后,我还有没有必要再看了。
04:06
是不是没必要再看了,就像我们这六这到六往后是不是都是重复的了,一个意思啊,一个意思,所以这块你要注意,我这小于A,实际上这个值呢,我定的有点。有点大了,那应该是谁呀?是不是应该是根号下A呀,那问题来了,你写个根号,你这写个根号,根号他还打不出来,他干嘛呀,他是不是不认识啊?哎,那也就是说我需要对这I是不是进行。开方啊,诶那怎么对这个一个数进行开方呢?我们在这说一下,有一个方法叫什么呢?叫做一个math点一个square,诶我们说这个方法可以干嘛呢?我们可以通过我们这个math.k干嘛呢?哎,对一个数进行们进行这个开放,哎进行开方,我们来看看效果,直接来什么呢?我直接挖一个这个什么呢?Reu result等于它我这来什么呢?比如说我来一个四,我们来看看它是什cancel.log一个这个reu result等于我加上一个result,然后呢,我把上面这先给它输掉,一保存,咱们来看效果。
05:13
这块是不是就二啊,为什么四的这个平方根开方以后是不是就是就是二啊来我来什么呢?来一个十六十六一开方走,你是不是四啊,因为是不是四四十六啊哎,四四十六,我来一个这个36。是不就是六啊,哎,六六三十六,我来一个97。我给你保存走,你是不是这么一个数啊,哎,那你就什么意思呀,9.8以后还有没有97的因数,新的因数了没有了,在之前是不是已经都已经检查过了,诶都已检查过了,那所以这9.8就相当于我所有因数的一个什么呀,中线啊中线,所以这块你要注意了,我要检查的话,我这还用不用小于I了,我小于谁了,小于我们这个ma点一个的一个什么呀?哎,但是小于也不对了,哎,你比如说是四,这开方式不是变成二啊,你接小于二是不是就不走了呀,这应该什么呀,小于等于二,也就说我们36里边那个六,你是不是也得检查呀,所以注意啊,不能是小于得小于等于,那你想想,那现在对于97来说,我只用检查谁了。
06:23
是不是只用检查到9.8了,或者其实只用检查到什么了,九了吧,诶十往后是不是都不用看了,那刚才我们是不是还要检查到这个96呢?那这工作是不是一下子提升很多呀?哎,提升很多,所以我们来看看,先看结果对不对啊,这我都得做了,然后呢,我这一运行咱们还是不输出它啊,咱们在外部浏览器运行一下,在我们这个火合里运行,这是一个,诶0.34这块,就咱们这值啊,太小了,我来什么呢?来一个这个100,哎还是1万,1万,刚才我们加上break以后是什么呀。25毫秒,那现在我改成这个A的值,我是不是改成这个开放的了,咱们来看有没有提成,这一块一刷新走你。
07:05
是不是变成2.06了,哎2.06啊,所以这块我们来说修改什么呢?修改我们这个,诶这个I这个阶的这个小于等于的这个值后,诶小于等于后变成多少呢?变成了一个2.06。看见差距了吧,是不是又增加了将近十倍啊,诶将近十倍啊,我这一保存,咱们一刷新,诶你看。二点多还是还是慢的呢,是还是慢的是吧,你看都是一点多了对吧?啊一点多啊,所以又增加了一个十倍,但是这块你要注意这个值呢,给它好好的理解一下,这个开方到底是一个什么意思啊,就是缩小它那个什么呀,取值的一个范围,那这回我们再试试,咱们看看值对不对吧,我还是先取一个100啊,看看值对不对,直接输出,然后我这里保存。二三五七十一,13 17 19 2329。97是不是值还是一样的呀,哎,值还是一样的啊,所以这块又提升了一下这个性能,诶那咱们可以干嘛呢。
08:05
如果这回我再改成什么呀,改成10万,他会不会又快一点呢,来看看。来揍你。哎哟,是不是快多了呀,不是一下子出来了呀,诶刚才这块呢,还是非常非常慢的,但是当我们这个修改了一下以后,是不是变成这么快了,哎,所以这块虽然只改了一个小的地方,但是性能却干嘛呀,却提升了不少啊,提升了不少,好,那这个呢,是我们进一步的一个修改,我们来听一下。
我来说两句