• 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;
    	}
    };
    

      

  • 相关阅读:
    1070 结绳
    1069 微博转发抽奖
    1068 万绿丛中一点红
    1067 试密码
    1066 图像过滤
    1065 单身狗
    CSS--文本溢出与换行
    css--滤镜filter
    css--flex布局
    css--table布局
  • 原文地址:https://www.cnblogs.com/xqn2017/p/8793511.html
Copyright © 2020-2023  润新知