AcWing725.求完全数
完全数定义:一个数除它本身以外的所有约数之和等于它本身。
要求一个数是不是完全数首先要求出所给数的所有约数。
for(int i=2; i<X; i++) {
if(X%i==0)
sum=sum+i; //X是要求的数,sum是约数之和
这段代码可以求出一个数的所有约数,但缺陷在于我们需要从1到这个数本身依次做一遍X%i的操作,在所给数过大时会超时,比如求666666是不是一个完全数。
for(int i=2; i<sqrt(X); i++) {
if(X%i==0)
sum=sum+i+X/i;
下面这段代码,在求出一个约数的同时,通过X/i可以求出另一个约数,而这两个约数,也一定是一个小于X的平方根,一个大于X的平方根,所以我们只需要遍历X的平方根之前的数,这样可以大大节约时间。