xqn2017

导航

507. Perfect Number

原文题目:

507. Perfect Number

解题:

寻找一个完美数,定义是除了自身之外的其他因子(包括1)总和等于本身的正整数,如28 = 1 + 2 +4 + 7+ 14就是完美数,

思路:

从1开始循环到num/2找到取模为0的数相加,判断总和是否等于自身,思路很简单,但是超时了。

class Solution {
public:
	bool checkPerfectNumber(int num) 
	{
		int sum = 0;
		int i = 0;
		if(num < 2)
		{
			return false;
		}
		for(i = 1;i < num/2 +1;i++)
		{
			if(num%i ==0)
			{
				sum += i;
			}

		}
		return sum == num;
	}
};

  继续想想,当整数很大时,循环耗时太久了,思考一下,比如说整数28,循环到4的时候,取模为0,那么4得加上,同样的28/4=7,除数7也是一个因子,也得加上,这样的话一次就加上了两个因子,同时把循环次数从num/2降到sqrt(num)

AC代码:

class Solution {
public:
	bool checkPerfectNumber(int num) 
	{
		int sum = 1;
        int i = 2;
		while(i*i < num)
        {
            if(num%i==0)
            {
               sum += i + num/i; 
            }
            i++;
        }
		return num > 1 && sum == num;
	}
};

  

posted on 2018-04-11 09:36  xqn2017  阅读(112)  评论(0)    收藏  举报