当前位置: 首页 > news >正文

Leetcode507. 完美数

Every day a leetcode

题目来源:507. 完美数

解法1:枚举

我们可以枚举 num 的所有真因子,累加所有真因子之和,记作 sum。若 sum=num 则返回 true,否则返回 false。

枚举范围从 [1, sum) 的话,会超时:

在这里插入图片描述

枚举范围从 [1, sqrt(sum)],再让 sum 加上num / i 即可。

注意 i=1 时,不能让sum加上num。

特判 num=1 的情况,返回false。

代码:

/** @lc app=leetcode.cn id=507 lang=cpp** [507] 完美数*/// @lc code=start
// class Solution
// {
// public:
//     bool checkPerfectNumber(int num)
//     {
//         int sum = 0;
//         for (int i = 1; i < num; i++)
//             if (num % i == 0)
//                 sum += i;
//         return sum == num;
//     }
// };
class Solution
{
public:bool checkPerfectNumber(int num){if (num == 1)return false;int sum = 0;for (int i = 1; i <= sqrt(num); i++){if (num % i == 0){sum += i;if (i * i < num && i != 1)sum += num / i;}}return sum == num;}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(sqrt(num))。

空间复杂度:O(1)。

解法2:数学

根据欧几里得-欧拉定理,每个偶完全数都可以写成 2p-1(2p-1) 的形式,其中 p 为为素数且 2p-1 为素数。

由于目前奇完全数还未被发现,因此题目范围 [1, 108] 内的完全数都可以写成上述形式。

这一共有如下 5 个:6, 28, 496, 8128, 33550336。

代码:

class Solution {
public:bool checkPerfectNumber(int num) {return num == 6 || num == 28 || num == 496 || num == 8128 || num == 33550336;}
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(1)。

空间复杂度:O(1)。

http://www.lryc.cn/news/66603.html

相关文章:

  • c++ 11标准模板(STL) std::vector (九)
  • 从Facebook到Diem币:社交媒体巨头在加密货币领域的演变
  • 利用font-spider对CSS字体进行压缩
  • 2023年软考系统架构师新版专栏导读
  • 时间表体验(2023.05.05-2023.05.06)
  • linux系统查询二进制BIn文件方法
  • api接口调用(1688/Taobao/jd平台API接口的调用实例)
  • Python+Yolov5舰船侦测识别
  • Qt5.9学习笔记-事件(五) 事件调试和排查
  • 【实用工具】SpringBoot实现接口签名验证
  • DDR基础
  • 理解find命令
  • OpenCV教程——调整图像亮度与对比度,绘制形状和文字
  • Python模块篇:函数/类/变量和常量/注释/导入和使用
  • Java反射和动态代理
  • [NOIP2004 提高组] 津津的储蓄计划(思路+代码详解)Python实现
  • 分布式搜索引擎es 面试突击
  • 社会心理学的六个经典实验
  • Java 单例模式详解
  • AI读心重磅突破登Nature!大脑信号1秒被看穿,还能预测未来画面
  • 【SAP Abap】X-DOC:SNRO - ABAP流水号应用
  • 基于AT89C51单片机的交通灯设计与仿真
  • MySQL系列三(定位慢SQL、SQL优化与索引优化)Using filesort
  • 免费使用GPT-4.0?【AI聊天 | GPT4教学】 —— 微软 New Bing GPT4 申请与使用保姆级教程
  • 渲染对电脑伤害大吗_如何减少渲染伤机?
  • 非线性最小二乘
  • 23.5.7总结(学习通项目思路)
  • 如何生成api接口获取宝贝商品详情,商品详情接口,产品详情
  • 微服务---Redis实用篇-黑马头条项目-登录功能(短信验证缓存,用户信息缓存)
  • 美国纽扣电池的包装电池盒必须附带警告标签16 CFR 第 1700.20