00:00
好,接下来我们来看我们第四一个练习啊呃,获取用户输入的任意数,判断这个数是否是质数啊啊,我们还是来新建一个文件啊,保存一下,专门来说一下这个零九。还是一个练习啊,写一下获取用户书的任意数,判断其是否是质数,那这里边我们要做第一件事,先来获取用户输入的一个数字啊,来这儿来写一个number吧,诶,Number等于一个这个int啊,我们还是做一个in的,我先要给他做一个类型转换印的音input的,然后这写一个,诶请输入一个什么呀,任意的诶任意的大于一的整数啊,任意的大于一的整数,请输入一个任意的大大于一的整数,那这里边注意为什么要输入任意的大于一的整数,因为我们刚才说了什么是质数,什么是质数,质数只能被一和它自身整除的数,一不是质数,也不是合数,所以你在这输一的时候,我们就没有必要去判断了,所以就就要求直接输一以上的,23456789都行啊,就不要输一了啊一以上的,然后这里边现在我们还是说啊这种,其实我这一块应该再去检查一下它这个数是不是一个合法的数,比如说他输的到底。
01:15
哎,有没有,是不是一,它是到底是不是负数,我这个位置按道理来讲我都应该去检查一下,但是现在我们的核心关注点不是在这儿,所以我就不管了,我们主要关注的还是我们这个一个业务逻辑,我们怎么去完成这个功能,所以我就这块设计的可能没那么完善,所以我们就假设用户输的数字都是合法的,假设我们的用户都是聪明的,他输的数字一定是23456789这些合法的整数啊,合法整数好,那现在这个number就是我们用户输的那个数啊,输的那个数,那现在我们要做的是是什么?诶,是判断我们这个number是否是质数啊,判断我们这个number是否是质数,那要怎么判断?
02:00
这道题其实会稍微的有一点难度,我们再强调一下,什么是质数?只能被一和它什么呀,自身哎整除的数,哎,就是质数啊,只能被一和它自身整除的数就是质数。比如说二只能被一和二整除,那二就是质数,比如说三只能被一和三整除,那么三就是质数,比如说四,四能被一和四整除,但是它也能被二整除,所以四就不是质数,五能被一和五整除,五就是质数,哎,六能被一和六整除,但是它同时还能被二和三整除,那么六也不是质数,就这么一个,非常简单,但是现在我们说了,要让你判断一个number是否是质数,你要怎么判断,你要怎么判断,那咱们在做到这种题的时候不用着急,诶,可能一说诶,让你判断number是否是一下子反应不过来,遇到这种问题,我们说最简单的方式,直接来举例子。什么叫举例子?咱们假设number是。
03:01
一个十的数,假设number就是九,假设number就是九,现在我让你检查九是不是质数,你要怎么检查?你要怎么检查?哎,我要检查九是不是质数,我是不是就应该先把那些所有的可能成为九的因数了,或者说所有的能可能整除九的数,我是不是都找出来呀?哎,比如说有谁呀?诶一和九我们就不用说了,因为除了一和它自身嘛,对吧?有谁呀,2345678,诶我说十行不行,诶十肯定不行,你比九大了,肯定不能整除九,所以这块我们找的都是什么,都是比九小的数,为什么找比九小的数,因为只有比它小的数是不是才有可能将它整除啊,你比它大就不可能了,所以这些数都是有可能成为九的因数的数啊,九的因数的数,那现在我们来看,那接下来呢,哎,我就要看这些数能不能把九整除,我来看二,诶。
04:07
除不了,诶四除不了,五除不了,六除不了,七除不了,八也除不了,都除不了,但是有一个谁呀,三能把九整除,那么九是不是质数,哎,就不是质数,所以通过九这个例子,我们想想,如果是十呢,怎么办?如果十我说要把二到九这几个数找到啊,如果是100呢,我就要找到二到什么呀,99,换句话说,我要获取到什么,获取到获取到所有的可能什么呀?可能整除我们这个number的整数啊,获取我们这个所有的可能整除number的整数,获取所有的对吧?那现在我们来看,那怎么获取啊。怎么获取,那我们这是不是还要是一个循环呀,比如说如果这个数是三,我就要获取什么呀,二如果这个数是四,我就要获取什么呀,哎,二和三,如果这个数是五,我就要获取什么呀?获取我们这个什么呀,叫做234,也就说我们这个数都是从几开始,诶从二开始到几结束到几结束四四是谁?四是是比我们当前数小一啊,哎,说白了就是什么呀,如果是五,我就获取二到五之间的数,不包括五,如果是三,我就获取二到三之间的数,不包括三,如果是四,我就获取二到四之间的数,是不包括四,也就说二到它之间不包括它本身这个数吧。所以在这我们要获取的是谁?是获取的是二到number之间的数,但是不包括number啊,包number,所以在这儿我们先来一个什么呀,哎,While循环,哎,咱们先初始化一个变量吧,我直接来一个。
05:54
Ii等于二,因为是从二开始,然后Y条件呢?诶条件是你的I得小于number,注意这能不能写等于,哎,不能写等于,你写等于是不是就包括它自身了,所以没有等于,然后在这我们来普润一下谁呢?普润一下A啊,普一下A,我们来看看这个I是谁啊,是谁,然后不要忘了我们知道I加等于一,我们是不是对I进行自增啊,I自增这时候我们来看,如果我的整数是三,那我的I就是什么呀?就是二,如果我的整数是十,那我的I就是从二一直到九,如果我的整数是八,那就是从二一直到七,也就说这些数是不是都是有可能整除八的数,哎,有可能整除八的数我们也叫,叫什么呀?叫因数,能把一个数整除数,我们说这个数是那个数的因数,比如说哎。
06:46
比如说九等于三乘以三,那我们说三就是九的因数啊,十等于二乘以五,二和五都是十的因数啊,十的因数,这是我们数学的知识啊,数学知识忘记的同学可以再查,稍微查一下啊,稍微查一下好,那现在我们已经获取到了所有可能成为number因数的这些数,那接下来呢?接下来干嘛?也就说I吧,I是所有的可能是number因数的数,那接下来我们是不是要判断什么?哎,我们要判断我们这个number能否被I整除啊,能否被I整除,那我们这来写一下,我这直接来一个if,叫做number膜也I干嘛呢?它不等于零,那我们说了number摩也I不等于零说明什么?
07:35
Number模拟I不等于零,说明number不能被I整除吧?哎,说明number不能被I整除,好,那我问你了。Number不能被I整除,能不能说明?Number不是number,是字符。再说一遍啊,Number不能被I整除,能不能说明number是质数?
08:03
想想。哎,注意,肯定是不能的,为什么?因为在这儿number不能被挨整除,只能说明它不能被这一个挨整除,而我挨的只有几个呀?是不是有很多呀?你得不能被所有的A整除,才能说明你不是质数是吧?举个例子来,九不能被二整除,能不能说明九是质数?很明显这是不行的,你得不能背什么呀?345678都不能帮将你整除,是不是才能说明你是质数啊?而三是不能把你整除啊,所以你不能被二整除,不能说明你是质数,对吧?这是一个道理,所以这也是一样,Number不能被I整除,不能说明number是质数。哎,你得什么呀?不能被所有的I整除,才能说明你是质数。哎呀,那我这样判断不行了,这样判断即使你进入判断,是不是也不能说明你是质数啊,那怎么办?哎,我改一个,我改什么呢?叫做number摩以等等于零,这样说明什么,这样说明。
09:05
我们的I是不是能被number整除啊?哎,那这我要说一句话,我们说了,如果哎number能被I整除,则说明我们这个number一定不是质数。对吧?如果你能被二整除了,则说明你一定不是质数,这句话有毛病吗?哎,一点毛病都没有对吧?这是绝对的真理,你如果不能,你如果能被二整除,那明你一定不是质数,你如果能被三整除,那说明你一定不是质数,那所以在这儿我们等于用了一个逆向思维,我不去判断你是不质数,我判断什么呀?我判断你是不是不是质数,我把那些不是质数的都找到,那剩下的是不是就都是质数了?所以在这我们来打印一下,我直接print一下number,哎,Print下number,现在我打印的时候,是不是在我们的if里打印呢?也就说我现在所打印出来的number全都不是质数啊,全都不是质数,我这一执行我们来看。
10:07
啊,我这number直接写一个,写一个这个写一个十走是打印出来了,打印出来就证明不是质数,我这一写一个写五五有没有打印,没有打印,没有打印是不是证明五是质数,哎,没有打印,我再来一个来一个这个99。99走99打印了,打印了很多遍,打印多少遍无所谓,只要打一遍是不是证明你不是质数,诶打一遍就证明你不是质数,所以现在我们是不是就已经判断出谁是质数谁不是质数啊,诶谁是质数谁不是质数,但是现在问题就来了,我们现在是不是需要去打印一个结果呀?哎,我需要打印一个结果来显示这个数到底是不是质数,那我们来说一下,那这个结果我在哪打印,你现在来看,我现在是不是等于在循环里边打印的呀,这好不好啊,你看我打印个100走一个,是不是打印一堆100啊,其实有一个就已经证明它不是我打印一堆,这是不是没有必要,所以当我去打印结果的时候,我有没有必要在循环内部去打印,很明显没必要对吧,我应该是在哪,我应该是在外部打印,打印什么,哎,Print一个,诶number什么呀,哎是质数。
11:20
或者是什么呀?哎,或者是number不是质数,是不是这两种啊,哎,要么说number是指数,要么number不是质数,但是这玩意儿你是不是没必要啊,哎,没必要在里边打印,咱们先留着啊,先留着,那这样效果除于十,先给我打印,十是指数,或者十不是指数,但是现在问题就来了,我在这儿打印的确可以确保只打印一次,的确可以确保只打印一次,但是注意我现在在循环的外部,我能不能知道这个number到底是质数还是不是质数。能不能知道?很明显在循环的外部我是不知道的,因为只有在哪还知道,只有在循环内部的if语句在这个位置,我才能判断出这个数到底是不是质数,而在循环外边是不是不知道啊?但是现在问题是我的结果必须在循环外边来输出,必须在外边来输出,那怎么办?现在的问题是里边知道结果。
12:22
外边要输出,但是外边又不知道结果,里边知道结果,但是他不能输出,外边能输出,但是他又不知道结果,那怎么办?那怎么办?哎,那就涉及到了我们怎么把内部循环内部的结果,我是不是要传递到我们的外部来呀,哎传到循环的外部来,那这要怎么办,这要怎么办,哎怎么办呀?哎举个例子是吧,哎举个例子,哎比如说那这这个这个过去打仗是吧,哎过去打仗,那我们说这个。有那种城池是吧,我们带兵打仗,带兵我要去攻打一个城池,那我怎么能判断出这个城池是不是我们自己的城池还是别人的城池,哎,一般我们城池上是不是要插一个旗子呀?哎,我一看城池上写个写个礼啊,我知道啊,这是王家的是吧?我直接进去就完了,我一看城池上写个王啊,这是老王家的,我得打去,那我是不是通过看这个旗子来识别这个城到底是谁的呀?诶,那我们就想了,诶我能不能在我的程序里也设置这么一个类似于旗帜这么一个东西,我通过这个旗帜就能判断出来我这个数到底是不是质数呢,行不行呢?哎,我们来写一下,那在这里啊,我们来干嘛呢?我在这儿啊,在循环在外边啊,循环上边我来创建一个变量,用来干嘛呢?用来记录我们这个number是否是质数啊,是否是质数,那注意默认我们认为number是。
13:57
质数啊,默认我认为number是指数,你像默认我认为这成姓理是吧,敬理,那现在这个变叫什么呢?叫做一个flag flag什么意思呀,就是旗帜的意思,就是一个标识,小旗子的意思啊,Flag等于一个什么呢?等于一个处,为什么要处呢?因为我默认它是质数啊,它是质数,所以现在我有这么一个旗子了,它默认是处,也就说它是质数,所以这个时候我在这儿打印的时候,我就可以做个判断了,如果库,也就说如果是质数,我就打印什么呀,是质数。
14:31
哎,如果处吗?If处,哎,不是处,If,我们这个flag啊,If flag有时候它的值处的时候我就打印是质数,然后else呢,哎,L我就打印什么呀,诶它不是质数,这样是不是就OK了,哎,这样就OK了,但是现在的问题是,我这么一执行,无论你是谁,是不是都是是质数,为什么?因为我这个flag的值是不是横为处啊,哎,横为处这一直都是处,那这玩意是不是永远不会执行,哎,永远不会执行,那也就是说这个旗子这个flag的这个变量我是需要修改的,什么时候修改,什么时候修改,当我知道number不是质数的时候,我是不是就要把它改成first,哎,改成first,好,那问你了,Number什么时候就不是质数?
15:20
哎,一旦进入到这个判断,是不是就证明number不是质数啊,不是质数我就应该把它改成false,所以在这儿我们来写一下,一旦进入判断,哎,则证明我们这个number不是质数,哎,则需要将我们这个flag,诶修改为false啊修改为false怎么改?直接来一个flag等于一个这个false啊,等于一个false,哎,那现在这个逻辑就比较明显了,那现在我们说了,如果一直不进判断,Flag是不是永远都是处,永远都是true,到这是不是就是是质数?哎,如果进入判断,进入判断就flag就证明number不是质数,不质数flag就变成false,在这是不是说出这句话了?哎,看效果直接一执行。
16:11
来一数吧,来一个二,走一个二是质数,对吧,再来一个,来一个17 17也是质数,再来一个,来一个这个44,做一个44不是指数,这样我们是不是就判断出来了,哎,判断出来了啊好,那这个就是我们的一个练习啊,这个练习,这个练习代码并不多,但是逻辑上稍微有一点难了,两个位置,一个是我们说如果你想判断这个数是不是质数,我们判断起来会有点麻烦,所以我们采用了一个逆向思维,我判断你是不是不是质数,我找到所有不是质数的,剩下的是不是都都是质数,所以有一个逆向思维在这个位置,然后在这里我们有一个flag这个变量来干嘛呢?来记录我们的状态啊,记录状态,因为我们需要把里边的信息传到外部,所以需要这么一个变量来传递这个状态,那这种东西我们经常会用到这个一定要好好的去看一下啊,这道题稍微的。
17:11
就有一些绕了,好好的去思考一下,自己来尝试去做一下啊,尝试做一下,好,我们先来停一下。
我来说两句