00:00
来,那咱们继续再往下吧,啊,再往下,再往下是看一看这个啊啥玩意,这是完数是吧。嗯。来,我们去新建一个文件啊,我们叫homework7.java啊。那么。那为什么不五的倍数?那就是五天的倍数啊,这个题目的意思就是五天的倍数,就是五天的倍数啊。你就按照五天的倍数写就行了啊。Class homework7。可能我这个题目没有表示清楚啊。不太好意思啊,我到时候再把这个题目改一下好吧,啊改一下啊。
01:04
好了,这个题目啊。一个数呢?如果恰好等于它的因子之和。这个数就是完数。那编程请找出1000以内所有的完数,首先第一步大家想一想。先从什么呀,一到1000对吧,每个数字都取出来,我觉得这个问题不大吧,For循环是不是对型I。对不对啊。呃,如果等于因子之和,这个数就是完数,那从一开始呗。对吧,从一开始啊,然后怎么着呢,I呢,小于等于多少啊,1000呗,I干啥呀,加加每循环一次,你就把这个I的值输出一下这个I值,这个I值是不是啊,就就是每一个数字呗,是吧,来Java c呢,编译一下homework t.Java。
02:06
Java器运行HOMEWORK7走。你从一到1000是都可以取出来的,哎呀,这看不见了,看不见无所谓了啊,那么接下来呢,我们来找一找,就是说我们在这里啊,可能需要做一件事,就是在这里,就是第二步是不是在这里可以拿到什么呀,拿到I。那么此时应该判断I是否是一个完数。对吧,就是判断,你比如说拿到六了,我怎么判断六是不是一个完数啊。你怎么做呀?啊。你们怎么做的,各位?来,咱们看一下什么是完数啊,什么是完数?这个完数呢,其实就是说一个数如果恰好等于它的因子之和。
03:06
因此。就是正好这个数啊,它正好是它所有因子全部加起来,哎,全部加起来得出这个结果正好是在数本身。啊,这种数我们叫完数啊,一个数如果恰好等于它的因子之和,这个数就是完数啊,首先这个概念你要清楚,这个数就是完数。啊,那么因子怎么找?那么因子怎么找。就因子怎么找?比如说十的因子。啊。十。对。你啊。一。哎,能能除尽是吧,哎,能除尽的就是能除尽的啊,就是就是就是就是这个这个这个这个因子是不是我们来找一下十的因子啊十。
04:06
对一,求余数等于等于零。是吧,十呢,对这个。二。求余数啊,也等于零。对吧,哎十呢,对三不行,对四也不行,对五。对吧,哎,对,五能不能除尽啊,可以吧,哎,等于等于零。但不包括十啊,你说十对十,求余数也等于零。啊,你说十它也是一个十是十的因子,这个不对啊。不算石本身啊。不算十本身。对吧,那十的因子是一。二和五对吧,一加二加五,那应该是八呗,那这个八和我们这个十不相等啊。
05:08
对吧,所以说呢,我们这个十就不是完数。不是数啊。一是任何数的因子,有道理啊,有道理说对啊,就在这里呢,可以拿出I,那么此时应该判断I是否是一个。就这个I,这个这个这个I是从一开始的啊。设置sum等于一就行就好了,可以可以没问题啊没问题。同学们一算完数吗?一是完数吗?一算不算完数。
06:08
不算。不是。一不是万数。那我们这个I还有必要从一从二开始呗。一不是完数呗。一不属于完数,从二开始判断。从哪开始判断?行不行?可以吧,哎,那接下来就是这个数字有了啊,找这个数字的因子。
07:02
假设现在这个数字就是六。就是六啊,I等于六啊,哎呀卡了。I等于六等于六。那在这里应该for循环。因此类型ii j等于一就从一开始吧。啊,这。小于几啊?小于等于几啊?或者是直接小于六,就刚才同学们所说的啊,小于六是吧,然后G加加,那么这个时候呢,这个J呢,取到的值是什么呀?是12345。这取得的值就是12345。但实际上啊,但实际上这。取取谁就行了,取到哪就行了。
08:03
123啊,取这几个数就行了。是吧,你取四有意义吗?所以说就刚才是不是取到一半就行。取一半就行吧。取到一半就行,所以这个位置怎么写啊。啊。这是六,咱总不能写死六吧?就写此六了,六除以二行吗?六除以二你这边你你是不是应该等于啊。对吧,那你六是谁呀?是I吧。对不对,哎,J等于一,然后J呢,小于等于什么呀?这个I除以2I是谁呀?I是我们这个数字嘛,I就是这个判断这个I是不是这个完数嘛,这个I本身就是判断I本身是不是完数嘛,那完数除以二,除以二之后,你这小于等于它从一开始往后取就行了。
09:14
对。啊,然后接下来呢,这加加接下来干什么呢。判断一下if if什么呢?If我们现在这个I,它是一个数字对吧?对谁呢?对我们这个这这不是循环嘛,这里边这个for循环循环循环过程当中,从这开始取嘛,是不是,哎,从这等于一开始取123456,就相当于说我们这个是六呗,然后先对一求余数对吧?哎等于等于零的情况下,我们认为这个一呀,现在就是什么呀,就是它的因子。啊就是它的因子,那再往下循环的话,那比如说呃,六它对二求余数,对三求余数,哎,我们发现123它都是什么呀?哎,因子啊,都是因子,那么这个六是谁啊啊,这个六其实就是I啦,那对谁呢?对我们G吧,哎,求余数,如果等于等于零,那么正好此时的J。
10:09
啊,就是此时的这个就是因子啊,就是因子,然后你记得把因子啊,记得将因子G啊追加累计,因为你最终你要因子求和嘛,是不是哎,因子求和。那么这块呢,你你的你的这个什么技术含量呢,就是定义这个定义什么呀,定义这个和的结果,定义这个和的结果的变量应该定义到哪。就是最后算完之后,你要累计一个变量值啊,这个变量的声明应该放到什么地方呢。啊。是应该放在这个放循环里边,还是这个放循环外边,还是说这个循环外边,还是说放到哪呢。各位就你选一个位置吧,就现在我要累计嘛,现在已经找出这个这是因子了。这我要累计啊,某某某干啥呀?加等谁呀,J呀加等这啊。
11:03
是不是,那这个变量就是这个变量在哪声明。就这个变量在哪声明。第一个循环外边,你准备生命到这儿是吗?最外边。为什么要放到最外边。同学们?为什么要放到这个放到外边啊,在这个放外边不行吗。你放到这个这个这个这个最外边的话,你是不是走完第一个完数之后。你还得把这个sum给它清零啊。
12:01
应该是你你这个for是每循环一次取出一个数,你要判断这个数,就是就你判断的这个数就是一个啥呀,就是是不是个完数是不是。那你判断完这个完数之后,你下一次再循环是不是判断下数是不是完数啊。那你应该在这声明这个项目吗?还是说把这个东西放放到哪,放到这啊,放到里边啊啊。哎,放到这儿各位啊,放到这儿,放到这儿你但你不能放这里边啊,你放这里边就就就不对了,放这里边每次都会把这个萨归零,对,所以说你这个位置也得选对了,你看咱不会选位置也不行,你得放到这个位置上。放到这个位置上,你这里边儿这个循环干啥呀。哎,如果这是因子的话,加就行了。把这个J加上去呗。对不对,等你这个for循环结束,是不是就代表算完了,所有因子是不是加起来了。
13:03
是不是得出一个结果,在这判断一下吧,If啥呀,就应不应该在这个for情况结束,以上for情况结束代表以上for结束表示什么。啊。以上的这个for结束表示什么?所有因子怎么着?求和完毕了,找出一个因子加求个和,找个因子加上求和来循环找个因子求个和,找个因子求个和,对不对?哎,是不是就求完了,求完之后这个sum是不是就是因子,求和之后结果看看等号,右边这个结果跟左边这个一样不一样,那左边这个是谁啊?是不是A呀,I是不是就是那个数字啊,所以如果说I呢,要等于等于谁啊I some,那么这种情况下,我认为I是一个什么完数,那system.out点打印输出什么呀I就可以了。啊,就是你循环结束之后啊,在这边你可以,哎,你就知道了,因为你所有的因子全部加起来了呀,加完之后呢,你有个和呀,你这个和的结果和这个I的值进行比较就行了,你I的值如果正好和你的和是相等,那就是完数呗。
14:10
是不是来来我们看一下啊,Java c呢,去编译homework7.java,然后Java去运行HOMEWORK7走。六二十八和。496是这样吗?同学们?结果是不是这个。你们运行的结果是不是这个。嗯。六二十八,496。好,那这个例子呢,就说到这儿各位啊,嗯,除以二就行,你这儿啊,你要不除以二的话也行,你不除以二的话,可能效率稍微低一些,你循环次数可能多一些嘛。对吧,你对于六来说,其实你你你你这块找因子的话,应该是至少是在它本身这个数字除以二的基础数字之内去找这个因子啊,如果已经这个数字超出了这个数。
15:11
一半再往后的话,像四和五就根本不可能是六的一个因子了啊啊,不可能是六的因子了,所以你至少得除一个二啊,至少得除一个二啊,这样的话效率要高一些嘛,但如果说你硬来,你说小于等于是吧,小于等于小于等于五对吧,那你可以啊,没问题啊,你循环次数可能多一些,可能后边的循环都没有用。啊,没有用啊好,那么这个呢,其实就是相当于还是for循环的嵌套了。对不对,还是循环嵌套。一加二加四加七加14等于28。哦,那那是啊,这这个没啥问题啊,没啥问题,没啥问题啊,就是这个数。
我来说两句